C++的字符重载问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:10:10
#include<iostream.h>
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0){real=r;imag=i;}
//构造函数
void operator ++ (int); //后置单目++
void display(); //输出复数
private: //私有数据成员
double real; //复数实部

double imag; };
void complex::operator ++(int) //重载函数实现
{ real++; imag++;
}
void complex::display()
{ cout<<"("<<real<<","<<imag<<")"
<<endl; }
void main() //主函数
{ complex c(5,4); //声明复数类的对象
cout<<"c="; c.display();

complex c3;
c++;
c3=c++;
cout<<c3;
cout<<"c++"<<endl;
c.display();
}
倒数3,4行语句有问题,为什么?应该怎么改才能表达出我想表达的意思呢?

两处问题
1,c3=c++; 如果你想这样用的话,++运算符重载的时候需要返回complex类型,即
complex operator ++ (int); //后置单目++
complex complex::operator ++(int) //重载函数实现
{
real++; imag++;
return *this;
}

2,cout<<c3; 如果你想这样使用的话,需要重载<<运算符
ostream& operator<<(ostream &out, complex& c)
{
out<<"("<<real<<","<<imag<<")"<<endl; //把out当cout用,写你自己的输出方式即可
return out;
}
然后使用cout<<c3; 的时候就会调用这个函数,cout为实参传给out

何以“cout<<c3;”呢?
楼主好像米有对complex重载“<<”怎么能用它输出呢 ^_^
加上这种运算符的重载部分应该就可以了