Die abgeleitete Klasse benötigt die privaten Mitglieder, obwohl sie nicht direkt darauf zugreifen kann. Andernfalls würde das Verhalten nicht auf der Klasse aufbauen, von der es abgeleitet ist.
Geben Sie zum Beispiel den privaten Kram vor:
%Vor%und die Klasse hat eine geti () und seti (). Der Wert von i muss irgendwo liegen, auch wenn es privat ist,
Die Basisklasse kann weiterhin die privaten Membervariablen & amp; Methoden.
Wenn Sie möchten, dass die abgeleiteten Klassen Zugriff auf Mitglieder haben, aber diese Mitglieder vor der Außenwelt verborgen bleiben, machen Sie sie protected:
.
Hier ein Beispiel zur Veranschaulichung:
%Vor% Vergessen Sie nicht, dass die Basisklasse Methoden haben kann, die nicht private
sind und somit für die abgeleitete Klasse zugänglich sind. Diese Methoden protected
oder public
Basisklasse können weiterhin die Basisklassenmethoden private
aufrufen. Dies ist besonders nützlich, wenn Sie die Kernfunktionen in der Basisklasse sperren möchten, z. B. mit einer Vorlagenmethode Entwurfsmusterimplementierung :
Der Grund dafür ist, dass abgeleitete Klassen eine is-a
Beziehung zur Oberklasse haben.
Eine abgeleitete Klasseninstanziierung IS Eine Superklasseninstanziierung ... nur mit mehr (oder weniger, weil einige Superklassenfunktionen privat gesetzt sind).
Wie bereits in anderen Antworten beschrieben, kann die abgeleitete Klasse syntaktisch nicht auf die privaten Mitglieder der Basisklasse zugreifen ; aber es muss eine Kopie desselben in seinem Speicherlayout haben. Denken Sie an Casting. Mit 'C' Casting können Sie eine abgeleitete Version in eine private Datenbank umwandeln. Der Compiler würde dann den korrekten Speicher-Offset benötigen, um ein gültiges Speicherlayout für das Basisobjekt zu erzeugen.
Bsp.
%Vor%Die abgeleitete Klasse "erbt" die privaten Mitglieder der Basisklasse in keiner Weise - sie kann nicht auf sie zugreifen und "erbt" sie nicht.
Eine Instanz der abgeleiteten Klasse enthält aus naheliegenden Gründen Instanzen der privaten Mitglieder der Basisklasse.
Ich weiß also nicht einmal, was Sie mit dieser Frage meinen.
Wenn das abgeleitete Klassenobjekt erstellt wird, wird auch der Basisklassenkonstruktor für die Erstellung des Basisobjekts aufgerufen. Wenn privaten Mitgliedern der Basisklasse kein Speicher zugewiesen wird, ist das Basisobjekt unvollständig.
Daher erbt abgeleitetes Klassenobjekt private Mitglieder der Basis, da sie während der Erstellung des Basisklassenobjekts erstellt werden, aber nicht zugänglich sind, da sie privat sind.
Obwohl auf die privaten Mitglieder von der Basisklasse aus nicht zugegriffen werden kann, werden sie von ihnen geerbt, da diese Eigenschaften von der abgeleiteten Klasse mit Hilfe nichtprivater Funktionen verwendet werden.
Auf private Mitglieder der Basisklasse wird nicht direkt zugegriffen, sondern von der Basisklasse nach der abgeleiteten Klasse.
Tags und Links c++