C ++重载输出运算符

时间:2013-02-17 17:40:34

标签: c++ overloading output

所以我正在编写我的c ++家庭作业,最后一部分是他希望我们用重载的输出/插入操作符替换格式化的输出方法(toString)。要100%诚实,我不知道他的意思是什么。我已经搜索了一下并使用重载的插入运算符找到了示例代码,但似乎无法找到如何将其合并到我的代码中。虽然我想我可能在错误的地方看。我的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

2 个答案:

答案 0 :(得分:4)

重载函数意味着提供具有相同名称但不同参数类型的其他函数。运营商也可能超载。许多运算符都有一个可以重载的相应函数,称为operator??,其中??是运算符本身。例如,如果您有两个类x的{​​{1}}和y对象,则可以重载T。重载运算符允许您为使用该类型的运算符赋予一些含义。所以现在你可以做operator+

流插入运算符为x + y。这是您<<时使用的内容 - 它插入到流中。这个运算符也可以重载,就像上面std::cin << "hello";重载一样。您需要重载的函数称为+

有两种方法可以重载二进制运算符,如operator<<(二进制运算符,因为它需要两个操作数,一个在左侧,一个在右侧,<<)。一种方法是使其成为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; } 左侧有<<而右侧有std::ostream,就会调用此函数。

答案 1 :(得分:2)

我认为您的任务是编写一个重载的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