C++重载输出运算符
C++ overloaded output operator
所以我正在编写我的c++作业,最后一部分他希望我们用重载的输出/插入运算符替换格式化的输出方法(toString)。老实说,我完全不知道他这么说是什么意思。我搜索了一下,发现了使用重载插入运算符的示例代码,但似乎找不到如何将其合并到我的代码中。尽管我想我可能找错地方了。我的toString如下:
string Movie::toString() const {
ostringstream oS;
oS << "nn====================== Movie Informationn"
<< "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
重载一个函数意味着提供具有相同名称但不同参数类型的其他函数。操作员也可能过载。许多运算符都有一个可以重载的对应函数operator??
,其中??
是运算符本身。例如,如果有两个类类型为T
的对象x
和y
,则可以重载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
,右侧为Movie
。
我认为您的任务是编写一个重载的operator <<
,它允许您将对象的字符串表示写入输出流:
std::ostream& operator <<(std::ostream& os, const Movie& movie) {
os << "nn====================== Movie Informationn"
<< "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
- 尝试重载输出运算符时,我无法遍历对象向量
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 在C++中重载输入/输出运算符
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 为什么带有逻辑和运算符以及增量运算符的 c++ 程序给出的输出与预期不同?
- 如何处理自定义输出运算符中的 iomanips?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- C 和 C++ 中运算符大小的不同输出
- 是否可以转换 c++ 运算符新输出?
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 如何输入和输出方括号运算符 []
- C++ 输出流运算符 <<() 中的字符何时加宽?
- 我使用箭头运算符打印出对象的变量值,并得到一些随机值作为输出
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- 使用模板化运算符输出集合集合<<
- 重载运算符<<输出布尔值.为什么
- C++重载运算符<<输出地址
- 如何重载运算符<<输出模板内定义的向量?