过载的流提取运算符

overloaded stream extraction operator

本文关键字:提取 运算符      更新时间:2023-10-16

im试图输入一个复数,并使用重载运算符来处理实部和虚部的解析。如果我输入一个类似1 + 2i的数字,我需要real = 1imaginary = 2

现在,如果我输入1 + 2i回车,输出为1 + 0i。我如何正确地做到这一点(Number有私人数据成员realimaginaryoperator>>是朋友函数)

//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这个简单的例子,你的原型应该不是问题。