链接:https://www.nowcoder.com/questionTerminal/8ed215974c814f8eb671f9a464399e97
来源:牛客网
#include<iostream.h>
class CComplex
{
public:
CComplex(double r = 0, double i = 0)
{
realPart = r;
imagePart = i;
}
void print()
{
cout << "该复数实部 = " << realPart << ",虚部 = " << imagePart << endl;
}
CComplex operator + (CComplex &c); // 重载运算符+
CComplex operator + (double r); // 重载运算符+
private: double realPart; // 复数的实部
double imagePart; // 复数的虚部
};
CComplex CComplex::operator + (CComplex &c) // 参数是CComplex引用对象,两个复数的加法
{
CComplex temp;
temp.realPart = realPart + c.realPart;
temp.imagePart = imagePart + c.imagePart;
return temp;
}
CComplex CComplex::operator + (double r) // 参数是double类型数据,一个复数与一个实数的加法
{
CComplex temp;
temp.realPart = realPart + r;
temp.imagePart = imagePart;
return temp;
}
void main()
{
CComplex c1(12,20), c2(50,70), c;
c = c1 + c2;
c.print();
c = c1+ 20;
c.print();
}
/*
运行结果为:
该复数实部 = 62, 虚部 = 90
该复数实部 = 32, 虚部 = 20
对运算符“+”作了两次重载,一个用于实现两个复数的加法,另一个用于实现一个复数与一个实数的加法。
当重载一个运算符时,必须定义该运算符要完成的具体操作,而且当运算符重载函数是类的成员函数时,
该函数的形参个数要比运算符 操作数个数少一个,双目运算符重载的成员函数只有一个参数,
单目运算符重载的成员函数没有参数。
友元重载的一般格式如下:
friend <函数类型>operator <重载的运算符>(<形参>) // 单目运算符重载
{ … } // 函数体
friend <函数类型>operator <重载的运算符>(<形参1, 形数2>) // 双目运算符重载
{ … } // 函数体
对于单目运算符的友元重载函数,只有一个形参,形参类型可以是类的对象,可以是引用,这取决于不同的运算符。
对于双目运算符的友元重载函数来说,它有两个形参,这两个形参中必须有一个是类的对象。
需要说明的是,=、()、[]和->运算符不能用友元来重载。
*/
一个双目运算符作为类的成员函数重载时,重载函数的参数表中有()个参数。