C++输出运算符过载
C++ output operator overload
我一直在做这项学校作业。赋值告诉我们使一个对象的输出运算符(<<)重载。这是我的代码:
#include <ostream>
using namespace std;
template <class T>
class CustomObject {
string print() {
string text = "";
for (int i = 0; i < num_items(); i++) {
text += queue[i];
text += " | n";
}
return text;
}
friend std::ostream& operator <<(std::ostream &output, CustomObject &q) {
output << "" << q.print();
return output;
}
}
所以我实例化这个对象如下:
CustomObject<int> co();
并调用其输出方法:
std::cout << co();
这将不可避免地调用print方法,并将字符串返回到默认输出流。
但是,在我的控制台/调试器中没有可见的输出。
我在这里错过了什么?
PS这是而不是完整的类,它是通用的,因为这里没有必要显示其他几种方法和功能。
PPS如果num_items()和队列变量是所述rest的一部分,则此类是PriorityQueue对象。因此,queue是指定类型的数组(因此是泛型声明),num_items()只返回数组的计数。
CustomObject<int> co();
这是一个函数声明。去掉括号。
std::cout << co();
为什么要将operator()
应用于co
?再次,去掉括号。这应该有效:
CustomObject<int> co;
std::cout << co;
遗憾的是,从print方法构建并返回字符串很难成为C++的惯用语言。以下是我要做的:
template <typename T>
class CustomObject
{
// ...
public:
void print(std::ostream& os) const
{
for (int i = 0; i != num_items(); ++i)
{
os << queue[i] << " | n";
}
}
};
std::ostream& operator<<(std::ostream& os, const CustomObject& object)
{
object.print(os);
return os;
}
如果您希望能够很好地打印临时对象,您应该将参数设置为常量引用:
CustomObject const& q)
相关文章:
- 尝试重载输出运算符时,我无法遍历对象向量
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 在C++中重载输入/输出运算符
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 为什么带有逻辑和运算符以及增量运算符的 c++ 程序给出的输出与预期不同?
- 如何处理自定义输出运算符中的 iomanips?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- C 和 C++ 中运算符大小的不同输出
- 是否可以转换 c++ 运算符新输出?
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 如何输入和输出方括号运算符 []
- C++ 输出流运算符 <<() 中的字符何时加宽?
- 我使用箭头运算符打印出对象的变量值,并得到一些随机值作为输出
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- 使用模板化运算符输出集合集合<<
- 重载运算符<<输出布尔值.为什么
- C++重载运算符<<输出地址
- 如何重载运算符<<输出模板内定义的向量?