例2:字符串相加操作 Char a[1o]=“Hello “ Char b[10]="World"; Char c[20]=a+b; 通过运算符重载实现 对象的运算操作: 严重的语法问题: 1.运用类机制 1.类型不一致; 2.a+b无意义 2.重载运算符 3. “十”不作串连接运 3.保持运算符概念上 倍 的一致性
例2:字符串相加操作 Char a[10]=“Hello “; Char b[10]=“World”; Char c[20]=a+b; 严重的语法问题: 1. 类型不一致; 2. a+b无意义 3. “+”不作串连接运 算 通过运算符重载实现 对象的运算操作: 1. 运用类机制 2. 重载运算符 3. 保持运算符概念上 的一致性
10.2运算符重载的方法 定义一个重载运算符的函数 运算符重载的方法是 在需要执行被重载的运算符 时,系统就自动调用该函数 运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: type class_name::operator @(type op_data) 运算后的 运算符函数 被重载的 运算符的另一 返回值 所属的类 运算符 操作数和类型 Complex类(复数)的加法运算,函数的原型 双目运算符 Complex operator+(Complex&c1); 带一个参数, 单目运算符 不带参数
10.2 运算符重载的方法 运算符重载的方法是 运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: Complex类(复数)的加法运算,函数的原型 Complex operator+ (Complex& c1); 定义一个重载运算符的函数 在需要执行被重载的运算符 时,系统就自动调用该函数 type class_name::operator @(type op_data) 被重载的 运算符 运算符的另一 操作数和类型 运算符函数 所属的类 运算后的 返回值 双目运算符 带一个参数, 单目运算符 不带参数
定义重载运算符的函数后,函数operator+重载了运算符+ #include <iostream> 例10.1程序的基础上 using namespace std; 重载运算符“+”, class Complex 使之用于复数相加。 public: Complex Complex()real-0;imag-0; Complex:operator+ Complex(double r,double i) (Complex &c2) freal=r;imag-i;} Complex c; Complex operator+(Complex &c2) c.real=real+c2.real; void display()月 c.imag-imag+c2.imag; private: return c; double real; double imag; 定义重载运 算符的函数
定义重载运算符的函数后,函数operator+重载了运算符+ 例10.1程序的基础上 重载运算符“+” , 使之用于复数相加。 #include <iostream> using namespace std; class Complex {public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex operator+(Complex &c2); void display( ); private: double real; double imag; }; Complex Complex∷operator+ (Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } 定义重载运 算符的函数
void Complex:display() {cout<<"("<<real<<"," <<imag<<"i)"<<endl; 运算符+用于复数运算 int main() {Complex c1(3,4),c2(5,-10),c3: c3=c1+c2; 运行结果: cout<<"c1=";c1.display(); c1=(3+4i) cout<<"c2=";c2.display() c2=(5-10i) cout<<"c1+c2=";c3.display() c1+c2=(8,-6i return 0;
void Complex∷display( ) { cout<<″(″<<real<<″,″ <<imag<<″i)″<<endl; } int main( ) { Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<″c1=″;c1.display( ); cout<<″c2=″;c2.display( ); cout<<″c1+c2=″;c3.display( ); return 0; } 运行结果: c1=(3+4i) c2=(5-10i) c1+c2=(8,-6i) 运算符+用于复数运算
比较例10.1和例10.2,两处不同: (1)在例10.2中operator+函数 +complex add函数 只是函数名不同,函数体和函数返回值的类型都是相同的 (2)在main函数中 c3=c1+c2;-c3=c1.complex add(c2); C++编译系统将程序中的表达式c1+c2解释为 c1.operator+(c2) 其中cl和c2是Complex类的对象 operator-+(Complex&c2)进行求值 得到两个复数之和
比较例10.1和例10.2,两处不同: 只是函数名不同,函数体和函数返回值的类型都是相同的 (2) 在main函数中 c3=c1+c2; c3=c1.complex_add(c2); C++编译系统将程序中的表达式c1+c2解释为 c1.operator+(c2) 其中c1和c2是Complex类的对象 (1) 在例10.2中 operator+函数 complex_add函数 operator+(Complex &c2) 进行求值 得到两个复数之和