Jakie rezultaty pojawią się po uruchomieniu poniższego kodu napisanego w języku C++? class KlasaBazowa {
public:
virtual void metoda() {
cout << "Bazowa. ";
}
};
class KlasaPochodna : public KlasaBazowa {
public:
void metoda() {
cout << "Pochodna. ";
}
};
int main() {
KlasaBazowa *bazowa = new KlasaPochodna();
KlasaPochodna *pochodna = new KlasaPochodna();
bazowa->metoda();
pochodna->metoda();
return 0;
}
Kod wyświetla 'Pochodna. Pochodna.', co wskazuje, że metody klasy pochodnej przejęły kontrolę nad tymi z klasy bazowej. To fajny przykład polimorfizmu, jaki mamy w C++. Tutaj metoda w klasie pochodnej jest lepsza od metody w klasie bazowej. To, jakie wywołanie się wykona, zależy od konkretnego obiektu, a nie od tego, jaką metodę zdefiniowaliśmy w klasie bazowej.
Wyświetlenie 'Bazowa. Pochodna.' wskazywałoby, że tylko jedna z metod została nadpisana, co nie ma sensu w tym przypadku. Znacznik 'Bazowa. Bazowa.' to już totalny brak polimorfizmu, co zupełnie mija się z celem tego kodu. A 'Pochodna. Bazowa.' sugerowałoby, że mamy do czynienia z częściowym nadpisaniem metod, co też nie jest zgodne z tym, co mamy w kodzie.