C++关于输入重载的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:01:52
我定义了一个复数的类complex,其中成员re和im分别表示实数和虚数部分.
我想得到如下的实现:
比如定义a为complex的一个对象,我想用对cin进行重载,使cin>>a将提示用户输入实数和虚数部分,我是这样写的(visual 2005平台):
std::istream & operator>>(std::istream &input,const complex &a)
{
std::cout<<"real:";
input>>a.re;
std::cout<<"imaginary:";
input>>a.im;
return input;
}
但是会有一个warning:
warning C4717: “COMPLEX::operator>>”: 如递归所有控件路径,函数将导致运行时堆栈溢出.
而且我在运行是也会不断的输出real而导致崩溃,希望高手能够指点迷津,小弟万分感谢!~!~

要给a赋值,怎么能声明为const类型呢?真是的。

#include <iostream>

using namespace std;

class Cmpx {
public:
Cmpx(double r = 0, double i = 0) {re = r; im = i;}
private:
double re, im;
public:
friend istream& operator>>(istream& input, Cmpx& c);
friend ostream& operator<<(ostream& output, const Cmpx& c);
};

istream& operator>>(istream& input, Cmpx& c)
{
cout << "real: ";
input >> c.re;
cout << "imaginary: ";
input >> c.im;
return input;
}

ostream& operator<<(ostream& output, const Cmpx& c)
{
return output << '(' << c.re << ',' << c.im << ')';
}

int main()
{
Cmpx a, b(1, 2);
cin >> a;
cout << a << endl << b << endl;
s