第二节运算符重载(教材P253-285) d main (0 f complex com1(1. 1, 2.2), com2 (3.3, 4.4), totall, total2; totall=operator+(coml, com2); cout << reall=w<<totall real; cout<<imag="<<totall imag<<endl; total=coml+com2 cout <<real2=w<<total real: cout<< imag=<<total2imag<<end; 程序中 > complex operator+( complex col, complex co2)为运算 符“+”的重载函数; totall=operator+(coml, com2); total2=com1+com2 yg 运算符重载的两种使用方法
第二节 运算符重载(教材①P253-285) void main() { complex com1(1.1,2.2),com2(3.3,4.4),total1,total2; total1=operator+(com1,com2); cout <<"real1="<<total1.real; cout<<" imag1="<<total1.imag<<endl; total2=com1+com2; cout <<"real2="<<total2.real; cout<<" imag2="<<total2.imag<<endl; } 程序中: ➢ complex operator+(complex co1,complex co2)为运算 符“+”的重载函数; ➢ total1=operator+(com1,com2) ;total2=com1+com2 为 运算符重载的两种使用方法
第〓节运算符载(敵材①P253285) 说明: >在C++中运算符可以通过重载扩充运算符的功能; >运算符重载是通过 operatora(实现的(a表示重载 的运算符:+、-、*、/、>、<等)—操作符函数 重载运算符不能改变运算符的原有的优先级和运算量 的个数; C++中大多数运算符均能够重载。如:+、、六/ &、= &&、‖ 十 new delete等 >不能重的运算符有:“.” 9 “#”(预处理符)(教材OP314)
第二节 运算符重载(教材①P253-285) 说明: ➢在C++中运算符可以通过重载扩充运算符的功能; ➢运算符重载是通过operator@( ) 实现的(@表示重载 的运算符:+、-、 * 、/、>、<等)——操作符函数; ➢ 重载运算符不能改变运算符的原有的优先级和运算量 的个数; ➢C++中大多数运算符均能够重载。如:+、-、 * 、/、 %、&、 = 、+=、-= 、&&、||、!、++、[]、new、 delete等; ➢不能重的运算符有:“.” 、“.*” 、“::”、“?:”、 “#”(预处理符)(教材③P314);
第〓节运算符载(敵材①P253285) 二、成员运算符函数 >思考:将上例中的数据成员改为私有成员,程序可执 行吗? 上例中的 complex类中的公有数据成员破坏了封装特 性,如果将其改为私有成员,可以将运算符重载函数 定义为成员函数。 ()成员运算符函数定义 >格式:返回类型横类名:0mmra(爹数表) 函数体} >其中,当为双目运算符时,参数表中为一个参数,单 目运算符时,参数表为空通过this指针传递
第二节 运算符重载(教材①P253-285) 二、成员运算符函数 ➢思考:将上例中的数据成员改为私有成员,程序可执 行吗? ➢上例中的complex类中的公有数据成员破坏了封装特 性,如果将其改为私有成员,可以将运算符重载函数 定义为成员函数。 ㈠ 成员运算符函数定义 ➢格式: <返回类型> <类名>::operator@(参数表) { 函数体 } ➢其中,当为双目运算符时,参数表中为一个参数,单 目运算符时,参数表为空——通过this指针传递
第〓节运算符载(敵材①P253285) (双目运算符的重载 >例【52】重载二个复数对象的加、减、乘、除运算 符熟悉双目运算符的重载 1、分析:设两个复数a+b和c+di,则有: >加法:(a+bi)+(cdi)=(atc)+(b+d)i; >减法:(a+bi)-(c+di)=(a-c)+(b-d)i; >乘法:(a+b)(+di)=ac-bd)(ad+beli )除法:(a+bi)(+di)=(a+bi)*(c-di)(c2+d (ac+bd)/(cl+)+(bc-adi/(c+d) 2、程序
第二节 运算符重载(教材①P253-285) ㈡ 双目运算符的重载 ➢例【5.2】重载二个复数对象的加、减、乘、除运算 符——熟悉双目运算符的重载。 1、分析:设两个复数a+bi和c+di,则有: ➢加法:(a+bi)+(c+di)=(a+c)+(b+d)i; ➢减法:(a+bi)-(c+di)=(a-c)+(b-d)i; ➢乘法:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i ➢除法:(a+bi)/(c+di)=(a+bi)*(c-di)/(c2+d2 ) =(ac+bd)/ (c2+d2 )+(bc-ad)i/(c2+d2 ) 2、程序:
第二节运算符重载(教材P253-285) #include <iostream.h> class complex i private double real double imag; public: complex(double r=0, double i=0) Rreal=r; imag=1; void printo complex operator+(complex c); complex operator-(complex c); complex operator*(complex c); complex operator/(complex c)
第二节 运算符重载(教材①P253-285) #include <iostream.h> class complex { private : double real ; double imag; public : complex(double r=0,double i=0) {real=r;imag=i;} void print(); complex operator+(complex c); complex operator-(complex c); complex operator*(complex c); complex operator/(complex c); };