C++输出运算符过载

C++ output operator overload

本文关键字:运算符 输出 C++      更新时间:2023-10-16

我一直在做这项学校作业。赋值告诉我们使一个对象的输出运算符(<<)重载。这是我的代码:

#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)