private und public Vererbung
-
Hi,
ich habe jetzt gehört, dass bei einer public Vererbung die Schnittstelle geerbt wird und bei einer private Vererbung die Implementierung. Stimmt das? Und wenn ja, wie ist das gemeint? Vielleicht kann mir das ja mal jemand anhand eines Beispiels erklären?
Vielen Dank!!
Gruß
Ingo
-
Bei der privaten Vererbung wird die Schnittstelle nicht vererbt. Die private Vererbung ist Membership sehr ähnlich, wobei letzteres meistens vorzuziehen ist, ausser wenn die Implemetierung der Basisklasse durch Vererbung angepasst werden soll.
#include <iostream> class base { public: void foo() { std::cout << "foooo\n"; } }; class D : private base { public: void bogus() { foo(); } }; int main() { D d; d.foo(); // Fehler, kein Zugang zur Schnittstelle von base d.bogus(); // Gut return 0; }Das gleiche ohne Vererbung und damit weniger enge VErwandschaft
class C { public: void bogus() { b_.foo(); } private: base b_; };
-
danke für das schöne Beispiel! Habs nun verstanden.
Gruß
Ingo
-
Herb Sutter (Autor von Exceptional C++) empfiehlt, private Vererbung nur zu benutzen, wenn Zugriff auf
protected-Member, Überschreibung einer virtuellen Funktion oder Konstruktion des Objekts vor anderen Basisklassenobjekten erforderlich ist. Aggregation stellt im Normalfall also die bessere Alternative dar.