C++重载流插入运算符问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 01:09:18
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double r,double i):real(r),imag(i){}
Complex operator +(Complex &c2);
Complex operator -(Complex &c2);
Complex operator *(Complex &c2);
Complex operator /(Complex &c2);
friend ostream & operator << (ostream &output,Complex &c);
private:
double real;
double imag;
};
Complex Complex::operator +(Complex &c2)
{
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator -(Complex &c2)
{
return Complex(real-c2.real,imag-c2.imag);
}
Complex Complex::operator *(Complex &c2)
{
return Complex(real*c2.real-imag*c2.imag,real*c2.imag+imag*c2.real);
}
Complex Complex::operator /(Complex &c2)
{
return Complex((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),
(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag)

你用的是VC++吧。VC对友元的支持很差的。建议你把类中的友元声明去掉,然后提供公有存取器函数访问私有成员。

另外,这个代码还有一个问题:你没有定义不带参数的构造函数。你的c3必须由这个构造函数创建。在public:下加上:

Complex() {}

即可

Complex Complex::operator +(Complex &c2)
{
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator -(Complex &c2)
{
return Complex(real-c2.real,imag-c2.imag);
}
Complex Complex::operator *(Complex &c2)
{
return Complex(real*c2.real-imag*c2.imag,real*c2.imag+imag*c2.real);
}
Complex Complex::operator /(Complex &c2)
{
return Complex((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),
(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));
}
上面四个函数体都是一样的错误。从你这里重写的四个operator看,它们应该不是类的成员operator,而是全局operator,所以不能这么定义
比如Complex Complex::operator +(Complex &c2) 要写成这样:

Complex operator + (Complex &c1,Complex &c2)
{
return Complex(c1.real+c2.real,c1.imag+c2.imag);