Ahoj,
snažím se přetížit operátor << u mých objektů. Mám tedy například třídu Bedna:
#include<iostream>
using namespace std;
class Bedna{
public:
Bedna();
friend ostream & operator << (ostream &os, Bedna x);
private:
int typ;
};
Bedna::Bedna(){
typ = 1;
}
ostream & operator << (ostream & os, Bedna x){
os << x.typ << endl;
}
int main(){
Bedna x;
cout << x;
return 0;
}
Tady to přetížení funguje správně. Ale rozhodnu-li se vytvořit ještě třídu Krabice, která bude skoro totožná s třídou Bedna (budou se lišit akorát v hodnotě int typ), tak bych mohl využít dědičnosti a vytvořit si rodičovskou třídu Container, která by implementovala všechny společné vlastnosti obou podtříd.
#include<iostream>
using namespace std;
class Container{
public:
int GetType();
friend ostream & operator << (ostream &os, Container x);
protected:
int typ;
};
ostream & operator << (ostream &os, Container x){
os << "Tady ta funkce by mela byt virtualni a mela by byt prepsana dcerinymi tridami" << endl;
return os;
}
int Container::GetType(){
return typ;
}
/*-----------------------------------------*/
/* Bedna */
/*-----------------------------------------*/
class Bedna: public Container{
public:
Bedna();
friend ostream & operator << (ostream &os, Bedna x);
};
Bedna::Bedna(){
typ = 1;
}
ostream & operator << (ostream & os, Bedna x){
os << x.typ << endl;
}
/*-----------------------------------------*/
/* Krabice */
/*-----------------------------------------*/
class Krabice: public Container{
public:
Krabice();
friend ostream & operator << (ostream &os, Krabice x);
};
Krabice::Krabice(){
typ = 2;
}
ostream & operator << (ostream & os, Krabice x){
os << x.typ << endl;
}
/*-----------------------------------------*/
/* Main */
/*-----------------------------------------*/
int main(){
Bedna bedna;
cout << bedna;
Krabice krabice;
cout << krabice;
Container * seznam = new Container[2];
seznam[0] =bedna;
seznam[1] = krabice;
cout << seznam[0];
cout << seznam[1];
return 0;
}
Potřeboval bych, aby výpis cout << seznam[0] fungoval, ale to nyní nejde - nejdřív by se myslím musel operátor << deklarovat jako virtuální a to friend funkce nemohou být. Jak by se tento problém dal vyřešit?
Dík, Jakub