C++中运算符如何重载

2024-11-26 04:04:45
推荐回答(2个)
回答1:

你的程序并没错,如果要改的话只要给他改成不是友元函数就可以了,在声明中把friend去掉
(声明中):
complex operator + (complex& c2);
(函数定义中):
complex complex::operator+(complex& c2)
{
return complex(real+c2.real,imag+c2.imag);
}

使用+法运算符的重载可以不需要用到友元源枣函数

如果我没猜错的话,你是用vc6.0编译的,这个编译器如果要使用友元函数,绝毁必须在类外另外声雹宏拆明,才可以使用(不过抱歉哈,具体声明格式我也忘了,你自己查查吧;不另外声明就是用友元函数,会报错。

如果你想深入学习类的话,建议你另外换一个编译器,如VS2005,VS2008,VS2010等,因为VC6.0对一些c++的类功能不可以直接使用。(像你写的这个程序在vs2008中就可以直接运行,不会报错)

回答2:

#include
using namespace std;
class complex //复数类的定义
{
public:
complex(){}
complex(double r,double i) //构造函数
{
real=r;
imag=i;
}
complex operator + (complex c1); //运算符+重载友元函数岁旁
void display(); //显示复数的值

private:
double real;
double imag;
};
void complex::display() //显示函数的实现
{
cout<<"complex="< }
complex complex::operator +(complex c1) //运算符重卖搜载友元函数实现
{
return complex(c1.real+real,c1.imag+imag);
}
void main()
{
complex c1(5,4),c2(2,10),c;
/* cout<<"c1=";
c1.display();*/
c=c1+c2; //使用重载运算符
cout<<"c=c1+c2="乎配橡;
c.display();
}
不用友元的方式实现的,能够正确于运行。