Как вызвать дружественную функцию родителя из потомка?
От: DStar  
Дата: 12.08.06 08:25
Оценка:
Здравствуйте!

По С++ совсем чайник. Осваиваю по книжкам, интернету.

Не смог найти ответа на свой 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


Буду рад вашим замечаниям.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.