class Kaczor
{
friend ostream & operator<<(ostream & wy, Kaczor & obiekt);
friend istream & operator>>(istream & we, Kaczor & obiekt);
}
class Donald : public Kaczor
{
friend ostream & operator<<(ostream & wy, Donald & obiekt);
friend istream & operator>>(istream & we, Donald & obiekt);
}
Kaczor* obiekt = new Donald; //wskaźnik ma typ klasy bazowej, ale wskazuje na potomną
plik << *obiekt;Niestety, w tym miejscu C++ wywołuje zaprzyjaźnioną funkcję operatorową dla klasy bazowej Kaczor. Chcę, aby wywołały się funkcje operatorowe dla klasy pochodnej Donald. Nie da się nadać funkcjom atrybutu virtual, bo nie są członkami klas. Próbowałem to obejść:
class Kaczor
{
friend ostream & operator<<(ostream & wy, Kaczor & obiekt);
friend istream & operator>>(istream & we, Kaczor & obiekt);
public: virtual istream & put(istream & we);
public: virtual ostream & get(ostream & wy);
}
class Donald : public Kaczor
{
friend ostream & operator<<(ostream & wy, Donald & obiekt);
friend istream & operator>>(istream & we, Donald & obiekt);
public: virtual istream & put(istream & we);
public: virtual ostream & get(ostream & wy);
}
ostream & operator<<(ostream & wy, Donald & obiekt)
{
return obiekt.get(wy); //podobnie dla >> w obu klasach
}Niestety, kompilator Microsoftu wyrzuca błąd Unresolved link.
Jak odwołać się do właściwej funkcji operatorowej?

Logowanie »
Rejestracja
Pomoc
Dodaj odpowiedź

Cytuj