4.2运算符重载的方法 一、运算符重载的方法: 1、定义一个重载运算符的函数: 2、在需要执行重载的运算符时,系统就自动调 用该重载的运算符函数 二、重载运算符函数的一般格式: 函数类型operator运算符名称(形参表列) {对运算符的重载处理} 思考:两个复数对象相加的运算符重载函数如何写? 5
5 4.2 运算符重载的方法 一 、运算符重载的方法: 1、定义一个重载运算符的函数; 2、在需要执行重载的运算符时,系统就自动调 用该重载的运算符函数 二、重载运算符函数的一般格式: 函数类型 operator 运算符名称 (形参表列) { 对运算符的重载处理 } 思考:两个复数对象相加的运算符重载函数如何写?
4.2运算符重载的方法 三、类运算符重载形式 1、非静态成员函数 以类成员形式重载的运算符参数处比实际参数少一个 例如:籍用戡厘指断针隐武机法运算符 则形式如下: class Complex{ double real,image; public: Complex operator+(Complex &c2){.) ●●●●●● : 这里的引用换成普通的对象名b可以吗? 6
6 4.2 运算符重载的方法 三、类运算符重载形式 1、非静态成员函数 以类成员形式重载的运算符参数比实际参数少一个, 例如:若用友元函数重载Complex类的加法运算符, 则形式如下: class Complex{ double real,image; public: Complex operator+(Complex &c2){.} . }; 第1个参数是以this指针隐式传递的 这里的引用换成普通的对象名b 可以吗?
4.2运算符重载的方法 2、友元函数 如果将运算符函数作为类的友元重载,它需要的 参数个数就与运算符实际需要的参数个数相同。 比如,若用友元函数重载Complex类的加法运 算符,则形式如下: class Complex{ friend Complex operator+(Complex &c1,Complex &c2)i /. :
2、友元函数 如果将运算符函数作为类的友元重载,它需要的 参数个数就与运算符实际需要的参数个数相同。 比如,若用友元函数重载Complex类的加法运 算符,则形式如下: class Complex{ . friend Complex operator+(Complex &c1,Complex &c2); //. }; 4.2 运算符重载的方法
4.2运算符重载的方法 四、运算符重载例题 例题4-2、写一段完整的程序用类的成员函数重载 Complex类的加法和乘法运算符。使得下面的代码能够正 常运行。 void main( {complex a(1,3.1),b(1.2,2): complex c=b; a=b+c; b=b+c*a; c=a*b+complex(1,2);} (a+bi)(c+di)=(ac-bd)+(bc+ad)i 例题4-3、写一段完整的程序用友元函数重载Complex 类的加法运算符
四、运算符重载例题 例题4-2、写一段完整的程序 用类的成员函数重载 Complex类的加法和乘法运算符。使得下面的代码能够正 常运行。 void main() {complex a(1,3.1),b(1.2,2) ; complex c=b; a=b+c; b=b+c*a; c=a*b+complex(1,2);} 注(a+bi)(c+di)=(ac-bd)+(bc+ad)i 例题4-3、写一段完整的程序用友元函数重载Complex 类的加法运算符 4.2 运算符重载的方法
例题4-2使用成员函数重载Complex类的加法和乘法运算 签 #include <iostream> complex complex:operator*( using namespace std; complex &c2) class complex /类定义 complex c; double real,image; c.real real c2.real- public: image*c2.image; complex(double r=0,double i=0) c.image=image*c2.real+real real=r;image=i;} c2.image; return c; void show() {cout<<reak<"+"<<image<<"i"<<endl; complex operator+(complex &c2); void main() {complex a(1,3.1),b(1.2,2); complex operator*(complex &c2); complex c=b; }; a=b+c; complex complex:operator+(complex &c2) b=b+c*a; complex c; c=a*b+complex(1,2); c.real=real c2.real; a.show(); c.image=image+c2.image; b.show(); return c; c.show();} 9
9 例题4-2 使用成员函数重载Complex类的加法和乘法运算 符 #include <iostream> using namespace std; class complex // 类定义 { double real, image; public: complex (double r = 0, double i = 0) { real = r; image = i;} void show( ) {cout<<real<<"+"<<image<<"i"<<endl; } complex operator+( complex &c2); complex operator*( complex &c2); }; complex complex::operator+ ( complex &c2) { complex c; c.real = real + c2.real; c.image = image + c2.image; return c ; } complex complex::operator* ( complex &c2) { complex c; c.real = real * c2.realimage*c2.image; c.image = image*c2.real+real * c2.image; return c ; } void main( ) { complex a(1,3.1),b(1.2,2) ; complex c=b; a=b+c; b=b+c*a; c=a*b+complex(1,2); a.show(); b.show(); c.show();}