Здравствуйте!
По С++ совсем чайник. Осваиваю по книжкам, интернету.
Не смог найти ответа на свой subj вопрос.
Пример.
Пусть к родительскому классу Base есть дружественная функция — перегруженный оператор "<<".
У потомка тоже есть аналогичная дружественная функция — перегруженный оператор "<<". Потомок должен вывести в поток какие-то свои данные, эатем он должен вызвать код перегруженного оператора "<<" родителя. Как это зделать?
Посмотрите пожалуйста, правильно ли я реализвал необходмый мне вызов (VC++ 6, Console application):
#include <iostream>
using namespace std;
//////////////////////// class Base ///////////////////////////
class Base
{
public:
Base();
F();
friend ostream& operator<< ( ostream&, const Base&);
};
Base::Base(){}
Base::F()
{
cout << " F from Base ";
}
ostream& operator << (ostream& os, const Base& Base)
{
os<< " << from Base ";
return os;
}
//////////////////////// class X - потомок Base ///////////////////////////
class X: public Base
{
public:
X();
friend ostream& operator<< ( ostream&, const X&);
F();
};
X::X():Base(){}
X::F()
{
cout << " F from X ";
Base::F(); // вызов функции родителя - классический книжный вариант
}
ostream& operator << (ostream& os, const X& X)
{
os<< " << from X ";
// Base::operator << (os, X); // не работает, т.к. это friend, а не функция-компонент класса
os << (Base) X ; // после долгих экспериментов получил работающую программу. Эта конструкция правильна?
return os;
}
/////////// main ///////////
void main()
{
X var;
var.F(); // здесь как в книжках
cout << var; // а как тут?
}
Результат работы:
F from X F from Base << from X << from Base
Буду рад вашим замечаниям.