Vererbung und Zugriffsspezifizierer
-
Hallo Also am besten mit nem Beispiel voraus:
class CBase { public: bool Check(); }; class CDerived : public CBase { protected: bool Check(); }; CBase *base = new CDerived(); base->Check();Also ist es richtig dass hier das Objekt base die Funktion Check() aufrufen darf.
-
ja. sogar wenn in der abgeleiteten Klasse die Methode privat wäre.
Du greifst ja via Basis Klasse zu.
-
Hm. Ja das habe ich auch bemerkt.
Nun weiß ich aber nicht genau ob ich die Funktion in der abgeleiteten Klasse nun weiter einschränken soll. Es wird eigentlich immer nur über die Basisklasse zugeggriffen.
-
y-vonne schrieb:
Hm. Ja das habe ich auch bemerkt.
Nun weiß ich aber nicht genau ob ich die Funktion in der abgeleiteten Klasse nun weiter einschränken soll. Es wird eigentlich immer nur über die Basisklasse zugeggriffen.
Nein, solltest du nicht! Das ist ziemlich schlechtes Design. Im Übrigen wird CDerived::Check() nicht aufgerufen, wenn du einen CBase-Pointer verwendest, da die Methode in CBase nicht virtuell ist.
-
Ok. War nur ein versehen dass ich die abgeleitete Klasse weiter eingeschränkt habe. Mich hats halt interessiert wieso es trotzdem geht.
Richtig virtual fehlt. Habe ich hier in meinem Beispiel vergessen.