试图改变<<多项式类的运算符

时间:2015-09-11 02:14:14

标签: c++

这是我接管运营商的地方。我评论并放入文本脚本及其cout << coeff[i] << ...行不断崩溃的程序。是运营商崩溃还是我应该去其他地方?

std::ostream& operator << (std::ostream& output, const Poly& p)
{
    cout << "This Polynomial is ";
    for (int i = 0; i <= Poly::MAXIMUM_DEGREE; i ++)
    {
        if (coeff[i] != 0)
        {
            if (i != Poly::MAXIMUM_DEGREE)
            {
                cout << coeff[i] << "x^" << i << " + ";
            }
            else
            {
                cout << coeff[i] << "x^" << i;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

首先要注意的是operator << 不是成员函数。它需要Poly作为参数,而不是隐式this指针。这应该解释编译错误:coeffp的成员,因此应该通过p访问,例如:p.coeff

假设coeff是私人会员,您需要operator << friendPoly

output << p.coeff[i] << "x^" << i << " + ";

答案 1 :(得分:2)

operator<<()需要写入output,而不是cout。它还需要返回output,因此可以链接流操作符。如果不返回任何内容,则会导致调用者对some_stream << some_poly << ' ' << some_other_poly;

这样简单的事情具有未定义的行为

当呼叫者使用运营商时,它将指定output是什么。例如,std::cout << some_poly会将some_poly写入std::cout,而some_stream << some_poly会将其写入some_stream。在您实现它之后,流操作符的所有使用都将写入cout而不是任何其他流,无论调用者是否想要。

此外,通常应由呼叫者决定是否输出辅助信息,例如字符串"This Polynomial is "。流媒体运营商应该只关注输出对象。例如,如果要输出“This Polynomal is”然后输出“That Polynomial is”,请让调用者做出决定(并输出需要的其他信息)。不要试图将这些信息硬编码到流操作符中,因为它会阻止调用者的这种灵活性。