Private Vererbung
-
Hallo Forum,
es sei;
class B : private A { ... }Kann ich dann innerhalb von B den this Zeiger einer Funktion übergeben die ein A erwartet? Das sollte doch gehen!
Vielen Dank
Peter
-
Warum probierst dus nicht aus?
-
----- schrieb:
es sei;
class B : private A { ... }Kann ich dann innerhalb von B den this Zeiger einer Funktion übergeben die ein A erwartet? Das sollte doch gehen!
Der this-Zeiger wird an Funktionen implizit übergeben, wenn du den Zugriff auf Funktionen in A durch B meinst.
Wenn du aber meinst, du kannst einer FUnktion, die ein A explizit erwartet ein B unterjubeln geht das definitiv nicht! Die private-Vererbung macht B nicht zu einem A (außer für als friend deklarierte Funktionen/Klassen), es macht nur Funktionen (public und protected) aus A direkt sichtbar in B.
Private Vererbung solltest du aber echt nur machen, wenn du nicht B als A ausweisen willst, aber von B aus Zugriff auf den protected-Bereich von A brauchst.
Für alle anderen Fälle wäre Komposition besser als private-Vererbung:class B { A a; public: /** interface goes here */ };
-
// def ist irgendwo anders definiert. int def(A objA); class B : private A { int abc() { def(this); } }Das wollte ich machen. Ich setze es dann um.
Ok, vielen Dank l'abra d'or
-
l'abra d'or schrieb:
Wenn du aber meinst, du kannst einer FUnktion, die ein A explizit erwartet ein B unterjubeln geht das definitiv nicht! Die private-Vererbung macht B nicht zu einem A (außer für als friend deklarierte Funktionen/Klassen)
Und für B selber eben auch. Soll heißen ein B kann sich selbst (oder ein anderes
als A ausgeben und an Funktionen übergeben, die ein A erwarten. So dass das was ---- vorhat funktioniert. Wobei die Übergabe per value slicing zur Folge hat.