Unterschied: public / private Vererbung?
-
Hallo!
Was ist der Unterschied zwischen einer public und einer private Vererbung?
Und wofür genau brauche ich "virtual" ?Danke schonmal!
MfG Bizarre
-
Mit einer public-Vererbung modelliert eine ist-ein Beziehung in diesem Sinne, mit dem anderen eine hat-ein Beziehung (Komposition), wobei man - bis auf gewisse und gemeine Tricks - normalerweise nicht über private Vererbung realisiert. Wenn du die Frage stellen musst, was private Vererbung ist, dann ist die Antwort: Verwende sie nicht. Ähnliches gilt für "virtual" - das verwendest du nur im Kontext von Mehrfachvererbung, und darauf verzichtest du besser auch.
Generell solltest du dir 10x überlegen, ob du bestimmte Beziehungen in deinem Code wirklich über Vererbung lösen willst.
-
und lies das: https://www.c-plusplus.net/forum/75672
-
Ah super! Vielen Dank
damit ist das Thema wohl abgehakt...
Aber noch eine Verständnisfrage habe ich:Wenn ich virtual weglasse, werden doch immer die Funktionen der Hauptklasse durch die, der abgeleiteten Klasse überschrieben, oder?
Danke schonmal!
-
OK, ich habe dich vermutlich falsch verstanden. Ich dachte, du meinst virtuelle Vererbung; du meinst aber eine virtuelle Funktion, oder?
Wenn du eine Funktion in einer abgeleiteten Klasse überschreiben willst, dann muss die Funktion in der Basisklasse als
virtual
deklariert sein und du erhälst Laufzeitpolymorphismus.
Wenn duvirtual
(in der Basisklasse) weglässt, dann wird die Funktion aus der Basisklasse von einer gleichnamigen Funktion in der abgeleiteten Klasse verdeckt und die Funktion, die über ein Objekt aufgerufen wird, hängt von dessen statischem Typ ab.Lern die Wörter, und dann verwende sie auch im Code. Wenn du eine Funktion überschreiben (auf englisch: "override", also "außer Kraft setzen") willst, dann verwende den
override
-specifier:class Base { public: virtual void foo(); }; class Derived : public Base { public: void foo() override; };
Und wenn du nicht willst, dass eine (weiter) abgeleitete Klasse deine virtuelle FUnktion nochmal außer Kraft setzt (überschreibt), dann verwende
final
.
Das ist alles nicht nötig, hilft dir aber, Fehler zu vermeiden.
-
Ahja ok! Vielen Dank für deine Hilfe
jetzt kanns endlich weiter gehen hehe