代码:
#include<iostream>
using namespace std;
class complex {
public:
double real;
double imag;
complex(double r = 0, double i = 0)
{
real = r; imag = i;
}
};
complex operator*(complex co1, complex co2)
{
complex temp;
temp.real = co1.real * co2.real- co1.imag*co2.imag;
temp.imag = co1.real * co2.imag+ co2.real* co1.imag;
return temp;
}
int main()
{
complex com1(2.3, 3.6), com2(2.8, 6.9), total1, total2;
total1 = operator*(com1, com2);
cout << "real1=" << total1.real << "" << "imag1 = " << total1.imag << endl;
total2 = com1* com2;
cout << "real2=" << total2.real << "" << "imag2 = " << total2.imag << endl;
return 0;
}
心得体会:
重载
在同一个作用域内的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。
重载指多个函数或方法具有相同的名称、不同的参数列表和定义。
关于运算符函数
运算符函数可以是类成员函数,也可以是友元函数。
定义运算符函数时,如果要使其第一个操作数不是类对象,则必须使用友元函数。
不能重载的运算符
- sizeof 长度运算符
- . 成员访问运算符
- .* 成员指针访问运算符
- :: 域运算符
- ?:条件运算符 如果将运算符重载函数作为成员函数,它可以通过this指针自由地访问本类的数据成员,因此可以少写一个函数的参数。但必须要求运算表达式的第一个参数是一个类对象,而且与运算符函数类型相同。如果运算符左侧的操本作数不是本类对象,则运算符重载函数不能作为成员函数,只能作为非成员函数;如果函数需要访问类的私有成员,则必须声明为该类的友元函数。将双目运算符重载为友元函数是,在函数的形参列表必须有两个参数,不能省略,形参的顺序任意,不要求第一个参数必须为类对象。但在使用运算符的表达式中,要求运算符左侧的操作数与函数的第一个参数对应,运算符右侧的操作数与函数的第二个参数对应。数学上的交换律在此不适用。解决方法是再重载一次,交换参数顺序。