Jestem w trakcie tworzenia projektu w którym mam do wykonania klasę szablonową opartą na kontenerze Vector, oraz dwie klasy: bazową i dziedziczącą po niej klasę pomocniczą. Klasa A (bazowa) 3 stringi tak samo jak klasa pomocnicza B (w taki sposób że przy wywołaniu klasy B wyświetla się 6 stringów).
Klasa A:
class A
{
protected:
string jedenA, dwaA, trzyA;
public:
A(string jeden, string dwa, string trzy);
A(){}
virtual void show(ostream& os) const
{
os << jedenA << " " << dwaA << " | " << trzyA << endl;
}
};
Klasa B:
class B : public A{
string jedenB, dwaB, trzyB;
public:
B(string mdwa, string mjeden, string zero, string jeden, string dwa, string trzy);
void show(ostream& os) const
{
os << A::jedenA <<" "<< A::dwaA << " | " << A::trzyA << " " << jedenB << " " << dwaB << " " << trzyB << endl;
}};
Klasa Kontener jest klasą szablonową i zawiera metodę dodaj (dodaje obiekt A lub B do vectora) oraz przeciążony operator ostream:
template <typename T>
class Kontener
{
vector<T> pojemnik;
public:
void dodaj(const T AlubB) {pojemnik.push_back(AlubB);};
friend ostream& operator<<(ostream& os, const Kontener<T>& k)
{
for (int i = 0; i < k.pojemnik.size(); ++i)
{
os << k.pojemnik[i];
}
return os;
}
};
W programie głównym utworzyłem zmienną typu Kontener<A*> żeby umożliwić dodawanie do vectora obiektów A lub B. W skrócie wygląda to w ten sposób:
int main()
{
Kontener<A*> kont;
kont.dodaj(new A(str1, str2, str3));
kont.dodaj(new B(str1, str2, str3, str4, str5, str6));
cout << kont <<endl;
return 0;
}
Problem jest z operatorem. Mianowicie nie wyświetla on wartości ukrytych pod wskaźnikiem tylko adresy wskaźników. W jaki sposób zmienić operator ostream z klasy Kontener (bo podejrzewam że w tym miejscu siedzi problem) tak żeby wyświetlały si wartości? Czy jest możliwość dostania się do metody show z klasy A i B w tym operatorze ostream?