virtuell - wo ist der Sinn?
-
Ich lese gerade in meinem Cpp Primer Buch das Kapitel zu Vererbung und hänge gerade am abschnitt wo erklärt werden soll was virtuelle methoden bringen. Ich sehe nicht den Sinn/Vorteil eine methode virtuell zu machen wo doch alle anderen methoden genauso vererbt werden??
Kann mich da jemand aufklären und mir vll n praktisches Beispiel geben? Wär der Person sehr verbunden.Danke an alle die sich die Mühe machen
lg S.
-
Es geht nicht darum, dass Methoden vererbt werden, sondern um den polymorphen Zugriff auf einen Basiklassenzeiger. Les mal weiter, das wird da sicher noch erklärt!
-
-
ok, danke ich lese das Kapitell dann einfach komplett und melde mich dann ggf noch mal, nur aktuell versteh ich nur Spanisch. Gibt es zufällig ein gutes Tuturial für das Thema?
-
Ein Beispiel ohne virtuelle Methoden:
class Tier { public: void PrintName() { std::cout << "Tier" << std::endl; } }; class Hund : public Tier { public: void PrintName() { std::cout << "Hund" << std::endl; } }; int main(){ Hund * einHund = new Hund(); Tier * einTier = einHund; einTier->PrintName(); einHund->PrintName(); return 0; }Ausgabe:
Tier
HundUnd jetzt ein Beispiel mit virtuelle Methoden:
class Tier { public: virtual ~Tier(){} virtual void PrintName() { std::cout << "Tier" << std::endl; } }; class Hund : public Tier { public: virtual void PrintName() { std::cout << "Hund" << std::endl; } }; int main(){ Hund * einHund = new Hund(); Tier * einTier = einHund; einTier->PrintName(); einHund->PrintName(); return 0; }Ausgabe:
Hund
HundWenn du dir das jetzt anschaust die beiden Beispiele verwenden beide male das gleiche Objekt. Aber wenn deine Methoden virtuell sind dann kannst du mit dem Zeiger auf die Basisklasse die Methoden der Abgeleiteten Klasse verwenden.
Ich hoffe das hilft dir jetzt den Sinn etwas besser zu verstehen.
BR
Vinzenz
-
definitiv danke