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

回到顶部