Оператор << в абстрактных классах, C++

Если у меня есть абстрактный класс, давайте назовем его "Позвоночный", у него есть поле std::string name; и у него есть чисто виртуальный метод virtual void print(std::ostream&) const noexcept = 0; который будет переопределен в дочерних классах и вызван в operator<<,

Я понимаю, как работает полиморфизм, и как реализовать operator<< в унаследованных классах.

Что я не получаю:

Я не понимаю: как реализовать operator<< в этом абстрактном классе, который использует функцию виртуальной печати. Почему этот код не работает? Мой абстрактный класс должен иметь operator<<,

virtual void print(std::ostream&) const noexcept = 0;
std::ostream & operator<<(std::ostream & str, Member &obj)
{
    return obj.print(str);
}

Это абстрактный код класса.

1 ответ

Решение

Вы пытаетесь вернуть результат print который void, но operator<< должен вернуться std::ostream,

Следующее должно работать:

class Vertebrate
{
    // ...
    virtual void print(std::ostream&) const noexcept = 0;
};

std::ostream& operator<<(std::ostream& stream, Vertebrate& obj)
{
    obj.print(stream);
    return stream;
}
Другие вопросы по тегам