Перегрузка оператора вывода C ++ - PullRequest
0 голосов
/ 29 мая 2011

Я работал над этим школьным заданием.Назначение подсказало нам сделать объект, у которого был перегружен оператор вывода (<<).Вот мой код: </p>

#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 () и queue являются частью упомянутого остальныхэтот класс является объектом PriorityQueue.Итак, очередь - это массив указанного типа (отсюда и общее объявление), а num_items () просто возвращает счетчик массива.

Ответы [ 2 ]

5 голосов
/ 29 мая 2011
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;
}
1 голос
/ 29 мая 2011

Если вы хотите иметь возможность печатать временные объекты в скважине, вы должны сделать параметр постоянной ссылкой:

CustomObject const& q)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...