Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Переопределение оператора << в производном классе

12K
05 марта 2007 года
andrystepa
24 / / 08.06.2006
Например имею базовый класс, содержащий 2 закрытых переменных. Есть перегруженные дружественные операторы << и >> для этого класса. Создаю производный класс и в нем переопределяю операторы << и >>. Можно ли сделать так, чтобы в реализации операторов для производного класса не повторять код из операторов для базового класса. То есть сделать так, как это делается, например при переопределении оператора =(), принадлежащего базовому классу. Если можно, то как это сделать, например с таким классом:
Код:
class Base {
public:
 Base(int a, int s);
 friend istream& operator<<(istream& inS, Base& obj);
....
private:
 int Age;
 int Sons;
};
class Derived:public Base {
public:
 Derived(int a, int s, int nal):Base(a, s) { nalog=nal;};
friend istream& operator<<(istream& inS, Derived& obj) {
//как тут вызвать оператор из базового класса?
};
private:
 int nalog;
};
3
05 марта 2007 года
Green
4.8K / / 20.01.2000
 
Код:
friend ostream& operator<<(ostream& inS, Derived& obj) {
        inS << (Base&)obj;
        .........
        return inS;
    };

Ты, кстати, перепутал istream и ostream.
Вот ещё мысль, которая может быть полезной:
http://forum.codenet.ru/showthread.php?t=31233
309
06 марта 2007 года
el scorpio
1.1K / / 19.09.2006
Ещё можно явно указать имя базового класса
 
Код:
friend ostream& operator<<(ostream& inS, Derived& obj)
 {
Base::operator << (inS, obj);
.........
return inS;
};

Так даже нагляднее - явно видно, оператор какого класса вызывается.
12K
06 марта 2007 года
andrystepa
24 / / 08.06.2006
Цитата: el scorpio
Ещё можно явно указать имя базового класса
 
Код:
friend ostream& operator<<(ostream& inS, Derived& obj)
 {
Base::operator << (inS, obj);
.........
return inS;
};

Так даже нагляднее - явно видно, оператор какого класса вызывается.


Этот вариант не проходит, так как оператор << не является членом класса. Он дружественная функция. А вот первый вариант:

 
Код:
inS<<(Base&)obj;

работает, и к тому же его легко использовать в цепочке вывода. Большое Спасибо всем!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог