Was sind die Zugriffsbezeichner? Sollte ich Erben mit private, protected oder public?
Ich bin verwirrt über die Bedeutung von Zugang Modifikatoren mit Bezug auf die Vererbung. Was ist der Unterschied zwischen Vererbung mit der private
, protected
und public
keywords?
- Wo sind Sie versuchen, verwenden Sie diese geschützt sind Mitglied? Was denken Sie, geschützt bedeutet?
- Welche andere Funktion? Können Sie geben einen minimalen, aber vollständigen code-Beispiel, das die Fehlermeldung erhält?
- Poste den code, was du eigentlich machen willst.
- Vielen Dank für die Beantwortung. Ich habe verstanden, wie gehen Sie mit Als helfen!
- SO ist ein wunderbares forum, um zu lernen, und die meisten Leute sind immer bereit zu helfen, genau das, was jeder sehen will ist Klarheit in Fragen motivation und Bereitschaft, zu lernen(versuche, code zu schreiben oder zu verstehen, Konzept), anstatt den Menschen dazu zu bringen, Sie für sich selbst. So erinnern Sie die Punkte, wenn Sie post das nächste mal. Glücklich lernen! 🙂
- Ich werde es mir merken. 🙂 Vielen Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
was sind die Zugriffsbezeichner?
Gibt es 3
access specifiers
für eine Klasse/Struktur/Union in C++. Diese Zugriffsbezeichner definieren, wie die Elemente der Klasse zugegriffen werden kann. Natürlich, jedes Mitglied einer Klasse zugegriffen werden kann, dass innerhalb dieser Klasse(Innerhalb einer member-Funktion der selben Klasse). Voran der Art der Zugriffsbezeichner, Sie sind:Öffentlichen - Die member als Public deklariert sind, zugänglich von außerhalb der Klasse durch ein Objekt der Klasse.
Geschützt - Die Mitglieder, die als Protected deklariert sind, zugänglich von außerhalb der Klasse ABER nur eine Klasse davon abgeleitet.
Private - Diese Mitglieder sind der Zugriff nur von innerhalb der Klasse. Kein Zugriff von außen erlaubt ist.
Einen Source-Code Beispiel:
Erbschaft-und Zugriffsbezeichner
Vererbung in C++ kann eine der folgenden Arten:
Private
VererbungPublic
VererbungProtected
VererbungHier sind die access-Regeln mit Bezug auf jedes dieser:
Public-Vererbung:
d.h. Keine Veränderung in der Zugang der Mitglieder. Die access-Regeln, die wir vorher besprochen werden weiter angewendet, um diese Mitglieder.
Code Beispiel:
Private-Vererbung:
Einem code Beispiel:
Protected-Vererbung:
Einem Code-Beispiel:
Erinnern, den gleichen Zugang Regeln gelten für Klassen und member down der Vererbungshierarchie.
Wichtige Punkte zu beachten:
- Access-Spezifikation ist pro Klasse, nicht pro Objekt
Beachten Sie, dass die access-Spezifikation C++ arbeiten auf pro-Klasse basis und nicht pro-Objekt-basis.
Ein gutes Beispiel dafür ist, dass eine Kopier-Konstruktor oder Kopier-Zuweisung-operator-Funktion, die alle Elemente des Objekts übergeben werden kann zugegriffen werden.
- Eine Abgeleitete Klasse kann nur den Zugriff auf Mitglieder der eigenen Basisklasse
Betrachten die folgenden code Beispiel:
Gibt es einen compilation error:
Weil der abgeleiteten Klasse können nur auf die Mitglieder des eigene Basisklasse. Beachten Sie, dass das Objekt
obj
weitergegeben werden, hier ist keine Möglichkeit, im Zusammenhang mit derderived
Klasse Funktion, in der es aufgerufen wird, es ist ein völlig anderes Objekt und somitderived
member-Funktion zugreifen können seiner Mitglieder.Was ist ein
friend
? Wie funktioniertfriend
Auswirkungen auf den Zugang der Spezifikation Regeln?Können Sie deklarieren eine Funktion oder Klasse als
friend
einer anderen Klasse ist. Wenn Sie dies tun, der access-Spezifikation, die Regeln gelten nicht für diefriend
ed Klasse/Funktion. Die Klasse oder die Funktion kann auf alle Mitglieder der jeweiligen Klasse.Haben Sie nicht, im Gegenteil, Sie verbessern Kapselung!
friend
Schiff wird verwendet, um anzuzeigen, dass ein vorsätzliche starke Kopplung zwischen zwei Entitäten.Wenn es eine Besondere Beziehung zwischen zwei Entitäten solche, die einen Zugang zu anderen
private
oderprotected
Mitglieder, aber Sie nicht möchten, dass jeder Zugriff durch die Verwendung derpublic
zugriffsspezifizierer dann sollten Siefriend
Schiff.friend
Beziehungen mit verschachtelten/member-Typen, und noch wichtiger ist eine präzise definition dessen, was geschützt bedeutet, dass sich das gemeinsame Missverständnis, dass diese stellen:class base { protected: int x; }; struct derived : base { static void f( base& b ) { b.x = 5; } };
virtual
beeinflusst Vererbung? Ich habe hier durch googeln dafür. Ich werde zurück zu den Suchergebnissen und Bearbeiten es in mir, wenn niemand durch die Zeit, die ich lernen.Die Erklärung von Scott Meyers in Effektiv C++ könnte helfen, zu verstehen, Wann Sie zu verwenden sind:
Öffentlicher Vererbung sollte Modell "ist-ein-Beziehung," in der Erwägung, dass private Vererbung sollte verwendet werden, für "ist-implementiert-in-terms-of" -, so dass Sie nicht haben, um sich an die Schnittstelle der Superklasse, du bist einfach wiederverwenden der Implementierung.