重载流提取运算符

时间:2013-02-09 16:41:47

标签: c++ operator-overloading cin

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

现在,如果我输入1 + 2i输入,则输出为1 + 0i。如何正确执行此操作(号码有私人数据成员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;
}

1 个答案:

答案 0 :(得分:1)

您的代码在我的编译器上工作得很好!也许问题出在其他地方(例如在输出中)?

请注意,从输入流中提取数字时,std::setw无效。

请记住,您可能还需要考虑以下形式的案例:A - Bi,如果用户决定在运算符或i周围插入额外或删除空格,则可能会这样。但对于简单的案例A + Bi,您的原型不应成为问题。

相关问题