Если у меня есть абстрактный класс, давайте назовем его «Позвоночный», у него есть поле 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);
}
Это абстрактный код класса.
Вы пытаетесь вернуть результат 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;
}
Других решений пока нет …