过载的流提取运算符
overloaded stream extraction operator
im试图输入一个复数,并使用重载运算符来处理实部和虚部的解析。如果我输入一个类似1 + 2i
的数字,我需要real = 1
和imaginary = 2
。
现在,如果我输入1 + 2i
回车,输出为1 + 0i
。我如何正确地做到这一点(Number有私人数据成员real
和imaginary
,operator>>
是朋友函数)
//input the form of 1 + 2i
istream & operator>>(istream &in, Number &value)
{
in >> std::setw(1) >> value.real;
in.ignore(3); //skip 'space' and '+' and 'space'
in >> std::setw(1) >> value.imaginary;
in.ignore(); //skip 'i'
return in;
}
//output in the for 1 + 2i
ostream &
operator<<(ostream &out, const Complex &value)
{
out << value.real << " + " << value.imaginary << "i" <<std::endl;
return out;
}
您的代码在我的编译器上运行良好!也许问题在其他地方(例如输出中)?
请注意,std::setw
在从输入流中提取数字时没有任何作用。
请记住,您可能还需要考虑以下形式的情况:A - Bi
,以及用户是否决定在运算符或i
周围插入额外的空格或删除空格。但是对于A + Bi
这个简单的例子,你的原型应该不是问题。
相关文章:
- 在C++中使用重载提取运算符时出现问题
- 使用 istream 提取运算符进行 csv 解析:如何检测缺失的字段值?
- 将文本文件数据读入字符数组时提取运算符的歧义
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 长方程加法/减法计算器,从文本文件中提取运算符和数字
- 运算符重载流提取运算符 (>>) C++会导致无限递归流提取
- 无法在C++中过载流提取运算符 (>>)
- 带有指针的重载插入/提取运算符
- 防止为字符串流提取运算符不支持的类型实例化模板类 (>>)
- 为什么我不能对提取运算符进行 decltype
- 是否保证标准提取运算符>>在失败时不会更改参数?
- 提取运算符 (>>) 可以覆盖变量吗?
- 重载提取运算符
- C++ 重载提取运算符 - 无法访问类中声明的私有成员
- 如何在重载提取运算符中读取行(忽略空格字符)
- 如何在C++中重载模板的朋友提取运算符(>>)?
- 两个类的重载提取运算符
- 为什么 cin 提取运算符会导致段错误
- 在派生类中使用提取运算符(>>)的方法以及在C++中处理静态数据成员的方法
- 提取运算符是否删除分隔符