1.掌握C+ +语言多态性的基本概念
2.掌握运算符重载函数的声明和定义方法
编写一个程序,实现复数的乘法。
多态性在面向对象方法中,所谓多态性就是不同对象收到相同消息,产生不同的行为。在C++程序设计中,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。
运算符重载函数系统已定义的运算符不适用于新的自定义数据类型,为了解决这一问题,C++允许运算符的重载。
运算符的重载是通过创建运算符重载函数来实现的;
运算符重载函数重载方法:
●类外定义普通函数
●类内定义成员函数
●友元函数
- 用类外定义运算符重载函数编写*
#includeusing namespace std; class complex { public: double real; double imag; complex(double r = 0, double i = 0) { real = r; imag = i; } void print(); void input(complex ); }; //类外定义 complex operator*(complex co1, complex co2) { complex temp; temp.real = co1.real * co2.real - co1.imag * co2.imag; temp.imag = co1.real * co2.imag + co1.imag * co2.real; return temp; } void complex:: print() { cout << "mcl real=" << real << " " << "mcl imag=" << imag << endl; } void complex::input(complex co1) { cout << "请输入实部"; cin >> real; cout << "请输入虚部"; cin >> imag; }
类外定义运算符重载函数不属于任何类,只能访问类中的公有成员数据。
2.用成员运算符重载函数编写*
#includeusing namespace std; class complex { public: double real; double imag; complex(double r = 0, double i = 0) { real = r; imag = i; } void print(); void input(complex ); complex operator*(complex c);//类内成员函数 }; complex complex :: operator*(complex c) { complex temp; temp.real = real * c.real - imag * c.imag; temp.imag = real * c.imag + imag * c.real; return temp; }
成员运算符重载函数可以访问类内的私有成员或保护成员。
在成员运算符重载函数的形参表中:
➢如果运算符是单目的,则参数表为空;
➢如果运算符是双目的,则参数表中有一个操作数。
对双目运算符而言,成员运算符重载函数的形参表中仅有一个参数,是运算符的右操作数。另一个操作数(左操作数)是隐含的this指针,当前对象。
3.用友元运算符重载函数编写*
#includeusing namespace std; class complex { public: double real; double imag; complex(double r = 0, double i = 0) { real = r; imag = i; } void print(); void input(complex ); friend complex operator*(complex co1, complex co2); //友元函数 }; complex operator*(complex co1, complex co2) { complex temp; temp.real = co1.real * co2.real - co1.imag * co2.imag; temp.imag = co1.real * co2.imag + co1.imag * co2.real; return temp; }
友元运算符重载函数可以访问类内的私有成员或保护成员,但不属于类内。
运算符重载函数说明:不能重载的运算符:
. 成员访问运算符
.* 成员访问指针运算符
? : 条件运算符
:: 作用域运算符
sizeof 长度运算符
C++只能对已有的C++运算符进行重载,不允许用户自定义新的运算符。
运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成的。
运算符重载不改变操作对象目数:
“+”为双目运算符,重载后依旧是双目运算符。
运算符重载不改变优先级。
运算符运算符重载函数的参数至少应有一个是类对象(或类的引用)。
程序执行结果如下:



