【发布时间】:2013-05-10 01:13:45
【问题描述】:
我正在尝试编写一个复数类,将operator + - * 重载为如下朋友:
ComplexNumber operator+(const ComplexNumber &c1, const ComplexNumber& c2)
{
return ComplexNumber(c1._r+c2._r, c1._i+c2._i);
}
ostream& operator << ( ostream &out, ComplexNumber &c){
out << c.getReal() <<'+'
<< c.getImg() <<'I' << std::endl;
}
我在做的时候没有遇到任何问题:
ComplexNumber c1(1,2);
cout << c1 << endl;
但是当我尝试执行以下操作时:
ComplexNumber c2(2,1);
cout << c1 + c2 << endl;
我收到一个错误:
没有已知的参数 1 从“ComplexNumber”到“ComplexNumber&”的转换
我知道问题在于operator+ 的返回值是ComplexNumber,但ostream 运算符需要ComplexNumber&。
我不知道该如何处理。谢谢
【问题讨论】:
-
只是为了确保您理解这一点,只要它是一个实际对象,而不仅仅是一个临时对象,
T可以传递给一个采用T&的函数。它所做的只是获取实际对象而不是复制它。与const T&的一个区别是您可以传入一个临时值,就像加两个后得到的一样。它将一直存在到完整表达式的末尾。 -
是的,我明白了,谢谢