这是我接管运营商的地方。我评论并放入文本脚本及其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;
}
}
}
}
答案 0 :(得分:2)
首先要注意的是operator <<
不是成员函数。它需要Poly
作为参数,而不是隐式this
指针。这应该解释编译错误:coeff
是p
的成员,因此应该通过p
访问,例如:p.coeff
。
假设coeff
是私人会员,您需要operator <<
friend
类Poly
。
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”,请让调用者做出决定(并输出需要的其他信息)。不要试图将这些信息硬编码到流操作符中,因为它会阻止调用者的这种灵活性。