C ++重载输出运算符

Jas*_*yer 1 c++ overloading output

因此,我正在编写c ++作业分配,最后一部分是他希望我们用重载的输出/插入运算符替换格式化的输出方法(toString)。老实说,我不知道他的意思是什么。我进行了一些搜索,并使用重载的插入运算符找到了示例代码,但似乎找不到如何将其合并到我的代码中的方法。虽然我认为我看错地方了。我的toString如下:

string Movie::toString() const {
    ostringstream oS;
    oS << "\n\n====================== Movie Information\n"
    << "\n             Movie Title:\t" << title << "  (" << releaseYear << ")"
    << "\n    US Rank & Box Office:\t" << usRank << "\t$" << usBoxOffice
    << "\nNon-US Rank & Box Office:\t" << nonUSRank << "\t$" << nonUSBoxOffice
    << "\n World Rank & Box Office:\t" << worldRank << "\t$" << worldBoxOffice
    << "\n";
    return oS.str();
}
Run Code Online (Sandbox Code Playgroud)

就像我提到的那样,我不确定“超载”是什么意思,因此,如果由于某种原因这还不足以直接帮助您解决问题,那么您能否简要介绍一下他替换后的意思?具有重载输出运算符的当前输出。谢谢

编辑:这是我的下一个问题。/sf/ask/1044723501/

Jos*_*eld 6

重载功能意味着为其他功能提供相同的名称但参数类型不同。操作员也可能过载。许多运算符都有一个对应的函数,可以重载,称为operator????运算符本身在哪里。例如,如果您有两个对象xy具有类类型T,则可以重载operator+。重载运算符可以使您为将该运算符与类型一起使用提供一些含义。所以现在你可以做x + y

流插入运算符为<<。这是您在执行操作时所使用的std::cin << "hello";-它会插入流中。该运算符也可以重载,就像+上面重载一样。您需要重载的函数称为operator<<

有两种方法可以重载二元运算符,例如<<(binary因为它需要两个操作数,一个在左侧,一个在右侧left << right)。一种是使其成为类型的成员,left并为其赋予类型的单个参数right。另一种方法是使它成为具有两个参数的非成员函数,一个是的类型,left另一个是的类型right。由于你的类型left将是std::ostream,你不能修改类(因为它是由标准提供的),所以你必须去与第二个选项。

因此,您的自由函数需要看起来像这样:

std::ostream& operator<<(std::ostream& os, const Movie& movie) {
  // Insert everything you want into `os`
  return os;
}
Run Code Online (Sandbox Code Playgroud)

现在,只要您在左侧和右侧进行操作<<,都将调用此函数。std::ostreamMovie