Anonymer Benutzer
Unterschied zwischen privater, öffentlicher und geschützter Vererbung
Was ist der Unterschied zwischen public
, private
und protected
Vererbung in C++? Alle Fragen, die ich auf SO gefunden habe, beziehen sich auf spezielle Fälle.
947
3
Um diese Frage zu beantworten, möchte ich die Accessors der Mitglieder zunächst mit meinen eigenen Worten beschreiben. Wenn Sie dies bereits wissen, können Sie mit der Überschrift "Weiter" fortfahren.
Es gibt drei Accessoren, die mir bekannt sind:
public
,protected
undprivate
.Lassen:
Base
kennt, weiß auch, dassBase
publicMember
enthält.Base
protectedMember
enthält.Base
ist sich desprivateMember
bewusst.Mit "ist sich dessen bewusst" meine ich "die Existenz anerkennen und somit in der Lage sein, darauf zuzugreifen".
weiter:
Das Gleiche geschieht mit der öffentlichen, privaten und geschützten Vererbung. Betrachten wir eine Klasse
Base
und eine KlasseChild
, die vonBase
erbt.Base
undChild
kennen, auch, dassChild
vonBase
erbt.geschützt
ist, wissen nurKind
und seine Kinder, dass sie vonBase
erben.privat
ist, weiß niemand außerKind
von der Vererbung.Es hat damit zu tun, wie die öffentlichen Mitglieder der Basisklasse von der abgeleiteten Klasse ausgestellt werden.
Wie litb anmerkt, handelt es sich bei der öffentlichen Vererbung um die traditionelle Vererbung, die man in den meisten Programmiersprachen findet. Das heißt, sie modelliert eine "IS-A"-Beziehung. Private Vererbung, etwas, das AFAIK nur in C++ vorkommt, ist eine "IMPLEMENTED IN TERMS OF"-Beziehung. Das heißt, man möchte die öffentliche Schnittstelle in der abgeleiteten Klasse verwenden, aber nicht, dass der Benutzer der abgeleiteten Klasse Zugriff auf diese Schnittstelle hat. Viele argumentieren, dass man in diesem Fall die Basisklasse aggregieren sollte, d.h. anstatt die Basisklasse als private Basis zu haben, sollte man ein Mitglied der abgeleiteten Klasse einfügen, um die Funktionalität der Basisklasse wiederzuverwenden.
Es handelt sich im Wesentlichen um den Zugriffsschutz der öffentlichen und geschützten Mitglieder der Basisklasse in der abgeleiteten Klasse. Bei der öffentlichen Vererbung kann die abgeleitete Klasse die öffentlichen und geschützten Mitglieder der Basisklasse sehen. Bei privater Vererbung ist das nicht der Fall. Bei protected können die abgeleitete Klasse und alle von ihr abgeleiteten Klassen sie sehen.