C++输出运算符过载
我一直在做这个学校任务。该任务告诉我们制作一个对象,该对象的输出操作符(< <)被重载。 这里是我的代码:C++输出运算符过载
#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()和队列变量是其余的部分,这个类是一个PriorityQueue对象。所以,queue是指定类型的数组(因此是泛型声明),而num_items()只是返回数组的数量。
回答:
CustomObject<int> co();
这是一个函数声明。省略括号。
std::cout << co();
你为什么底肥operator()
到co
?再次,省略括号。这应该工作:
CustomObject<int> co; std::cout << co;
唉,从打印方法建立并返回一个字符串很难用惯用的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;
}
回答:
如果您希望能够打印的临时对象好了,你应该做的参数const引用:
CustomObject const& q)
以上是 C++输出运算符过载 的全部内容, 来源链接: utcz.com/qa/265194.html