Warum erbt die abgeleitete Klasse die privaten Mitglieder der Basisklasse? [Duplikat]

9

Ich weiß, dass die abgeleitete Klasse nicht auf die privaten Member der Basisklasse zugreifen kann. Warum erbt die abgeleitete Klasse also die privaten Member der Basisklasse? Gibt es einen Fall, dass es nützlich ist?

Danke!

    
skydoor 06.01.2010, 21:30
quelle

9 Antworten

21

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,

    
Richard Pennington 06.01.2010, 21:36
quelle
10

Die öffentlichen und geschützten Methoden der Basisklasse können weiterhin auf private Variablen der Basisklasse zugreifen, und diese Methoden sind in der abgeleiteten Klasse verfügbar.

    
UncleO 06.01.2010 21:33
quelle
4

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%     
John Dibling 06.01.2010 22:01
quelle
4

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 :

%Vor%     
Void 06.01.2010 22:27
quelle
2

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).

    
Paul Nathan 06.01.2010 21:33
quelle
2

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%     
Abhay 07.01.2010 04:39
quelle
0

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.

    
Stefan Monov 06.01.2010 21:33
quelle
0

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.

    
ishan 07.01.2010 05:41
quelle
0

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.

    
Parmanand Parihar 23.06.2016 06:27
quelle

Tags und Links