C++ 输出运算符重载

标签 c++ generics overloading

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

#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方法,将字符串返回给默认的输出流。

但是,在我的控制台/调试器中没有可见的输出。

我在这里错过了什么?

请注意,这不是完整的类,它是通用的,因为这里没有必要显示其他几个方法和功能。

PPS num_items() 和queue 变量是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;
}

关于C++ 输出运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168419/

相关文章:

c++ - 为我的程序分配更多处理器周期

Scala - 用边界覆盖类型成员

c++ - C++中的动态ad hoc多态性

c# - C# 方法签名中的类型转换

c++ - 知道将哪个ostream传递给函数c++

c# - C# 中的重载方法

iphone - 如何下载没有文件扩展名的url源代码?

c++ - SDL_Surface 拒绝 blit

c++ - 计算一个 cuda 内核有多少 block 和线程,以及如何使用它们

java - 方法具有相同类型的删除