1

所以我正在编写我的 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();
}

就像我提到的那样,我不确定“超载”是什么意思,所以如果由于某种原因这不足以让您直接帮助我解决问题,那么您能否通过替换给我简要说明他可能意味着什么具有重载输出运算符的当前输出。谢谢你

编辑:这是我的下一个问题。https://stackoverflow.com/questions/14924621/c-overloaded-output-operator-cont

4

2 回答 2

6

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

流插入运算符是<<. 这就是你在做的时候使用的东西std::cin << "hello";——它插入到流中。这个运算符也可以重载,就像+上面重载一样。调用需要重载的函数operator<<

有两种方法可以重载二元运算符,例如<<(二元运算符,因为它需要两个操作数,一个在左侧,一个在右侧,left << right)。一种是使其成为 of 类型的成员,left并给它一个类型为 的参数right。另一种是使其成为具有两个参数的非成员函数,一个是 of 的类型,left另一个是 的类型right。由于您leftwill 的类型是std::ostream,因此您无法修改该类(因为它是由标准提供的),因此您必须使用选项二。

所以你的自由功能需要看起来像这样:

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

现在,每当您在左侧使用 a 和在右侧<<使用a时,都会调用此函数。std::ostreamMovie

于 2013-02-17T17:48:15.333 回答
3

我认为您的任务是编写一个重载的operator <<,它允许您将对象的字符串表示形式写入输出流:

std::ostream& operator <<(std::ostream& os, const Movie& movie) {
    os << "\n\n====================== Movie Information\n"
       << "\n             Movie Title:\t" << movie.title << "  (" << movie.releaseYear << ")"
       << "\n    US Rank & Box Office:\t" << movie.usRank << "\t$" << movie.usBoxOffice
       << "\nNon-US Rank & Box Office:\t" << movie.nonUSRank << "\t$" << movie.nonUSBoxOffice
       << "\n World Rank & Box Office:\t" << movie.worldRank << "\t$" << movie.worldBoxOffice
       << "\n";
    return os;
}

您可以像使用内置类型一样使用此运算符:

Movie m;

// Do something with m

cout << m;      // Write m to the standard output
于 2013-02-17T17:44:48.037 回答