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/
重载功能意味着为其他功能提供相同的名称但参数类型不同。操作员也可能过载。许多运算符都有一个对应的函数,可以重载,称为operator??,??运算符本身在哪里。例如,如果您有两个对象x且y具有类类型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