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;
};
Переопределение оператора << в производном классе
Например имею базовый класс, содержащий 2 закрытых переменных. Есть перегруженные дружественные операторы << и >> для этого класса. Создаю производный класс и в нем переопределяю операторы << и >>. Можно ли сделать так, чтобы в реализации операторов для производного класса не повторять код из операторов для базового класса. То есть сделать так, как это делается, например при переопределении оператора =(), принадлежащего базовому классу. Если можно, то как это сделать, например с таким классом:
Код:
friend ostream& operator<<(ostream& inS, Derived& obj) {
inS << (Base&)obj;
.........
return inS;
};
inS << (Base&)obj;
.........
return inS;
};
Ты, кстати, перепутал istream и ostream.
Вот ещё мысль, которая может быть полезной:
http://forum.codenet.ru/showthread.php?t=31233
Код:
friend ostream& operator<<(ostream& inS, Derived& obj)
{
Base::operator << (inS, obj);
.........
return inS;
};
{
Base::operator << (inS, obj);
.........
return inS;
};
Так даже нагляднее - явно видно, оператор какого класса вызывается.
Цитата: el scorpio
Ещё можно явно указать имя базового класса
Так даже нагляднее - явно видно, оператор какого класса вызывается.
Код:
friend ostream& operator<<(ostream& inS, Derived& obj)
{
Base::operator << (inS, obj);
.........
return inS;
};
{
Base::operator << (inS, obj);
.........
return inS;
};
Так даже нагляднее - явно видно, оператор какого класса вызывается.
Этот вариант не проходит, так как оператор << не является членом класса. Он дружественная функция. А вот первый вариант:
Код:
inS<<(Base&)obj;
работает, и к тому же его легко использовать в цепочке вывода. Большое Спасибо всем!