【发布时间】:2013-11-30 08:18:37
【问题描述】:
我有一个编程任务,我必须重载 operator
这个想法是您可以在命令控制台中输入一个复数,例如 5.6 + 6.7i 和 然后您可以使用 cin 获取该数据并将其存储到 ComlexNumber 对象中。 辛
这里是重载的方法
istream & operator>>(istream & in, ComplexNumber & n){
double real;
double imag;
in>>real;
char _operator;
in.get(_operator);
while(_operator == ' ' || _operator == '\n' || _operator == '\t'){
in.get(_operator);
}
int mult;
switch(_operator){
case '+':
mult = 1;
break;
case '-':
mult = -1;
break;
default :
in.setstate(ios::failbit);
return in;
};
in>>imag;
imag *= mult;
n = ComplexNumber(real,imag);
return in;
}
问题是,当我尝试使用控制台测试代码时,当我输入一个复数时,只有数字的实部得到正确的值,而虚部总是得到 0。我认为这与我正在尝试解析紧挨着“i”字符的数字这一事实。奇怪的是,当我将值存储为整数而不是双精度时,代码运行良好。有谁知道这是为什么以及是否有解决方案?
【问题讨论】:
-
您对哪个
operator有疑问?你的标题是<<,但代码是>>。 -
我建议你在 StackOverflow 上搜索“[c++] 复数输入”,看看会出现什么结果。
标签: c++ operator-overloading istream