在类中进行运算符重载的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 00:44:58
各位大大帮个忙:

偶在书中看到一个运算符重载的例子:
这是某个类:
class complex{
private:
double r,i;
public:
complex operator +(com b);
……
}
下面它对“+”号重载定义:
complex complex::operator + (complex b){return complex(r+b.r,i+b.i);}

偶的问题是 请问(r+b.r,i+b.i)这个语句前面为什么要加上这个类的类名complex呢???
我补充一下 回一楼的 类中是有一个构造函数:
complex (double R=0, double I=0):r(R), i(I){}

但是 构造函数不是不允许被显式调用只能由系统自动调用的吗??这里不是调用构造函数吧~~

这不是显式调用啦。
return complex(r+b.r,i+b.i);
这是建立一个临时对象,它没有对象名,是一个无名对象。在建立临时对象过程中调用构造函数。
这句话不是我说的,是谭浩强版C++程序设计 318页的原文。刚刚查的书。

你看看complex类里是不是有个构造函数,类似于这样的:
complex(double a,double b)
{
r=a;
i=b;
}
其实return complex(r+b.r,i+b.i);就是调用了这个构造函数,创建了一个新的complex对象,并把它返回,这样就实现了“+”号重载。