полиморфизм — оператор & lt; & lt; в абстрактных классах, переполнение стека

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

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

0

Решение

Вы пытаетесь вернуть результат 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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]