2016-02-21 2 views
0

У меня есть базовый класс, в котором выполняется переопределение оператора < <.Оператор переопределения C++ << в унаследованном классе

friend std::ostream& operator<<(std::ostream& out, const Animal& animal); 
    ostream & operator<<(ostream & out, const Animal& animal) 
{ 
    out << animal.age << "," << animal.size << endl; 
} 

Это в .h моего класса Abonne. У меня есть унаследованный класс этого класса Abonne с именем Etudiant. Я хочу переопределить оператор < < в классе Etudiant, но я хочу, чтобы он вызывал оператора < < базового класса Abonne в определении класса Etudiant, а также добавлял больше. Я попытался это:

friend ostream& operator<<(ostream& out, const Dog& dog); 

ostream& operator<<(ostream& out, const Dog& dog) 
{ 
    return out << dog << endl; 
} 

Это не работает, ссылаясь на < < о себе и recursiving, пока она не выходит из строя.

Как я могу продолжить?

спасибо.

+2

_ "У меня есть базовый класс, который содержит переопределение оператора << в качестве глобальной функции" _ Все об этом утверждении неверно. –

+1

Создайте функцию 'put()', которая может использоваться с классификатором класса. –

ответ

0

Легко! Вам нужно вызвать версию, которая принимает Abonne. Так просто сделайте это:

return out << static_cast<const Abonne&>(etudiant) << " ... and more" << endl; 
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

Спасибо :) Знаете ли вы другой способ без кастинга? Abonne :: operator << не работает, потому что функция глобальна? – wayland700

+0

@ TheBlueWizard: Правильно. –

+0

Знаете ли вы, было ли это нормально в случае, когда функция не является глобальной? – wayland700

Смежные вопросы