friend-Funktion in abgeleiteter Klasse mit privater Vererbung

7

Wenn eine abgeleitete Klasse privat von einer Klasse geerbt wird und die abgeleitete Klasse eine friend-Funktion f () hat, so können die Mitglieder f () von der abgeleiteten Klasse und der Basisklasse aus zugreifen.

%Vor%

Ich verstehe, dass, wenn eine Klasse privat von der Basisklasse geerbt wird, alles in der abgeleiteten Klasse privat ist.

Aber warum im obigen Code kann die Funktion f () auf a, b, d, e, f, aber nicht auf c?

zugreifen     
skydoor 26.01.2010, 21:17
quelle

4 Antworten

9

'Freundschaft' gewährt den Zugriff auf die Klasse, die den Freund deklariert - es ist nicht transitiv. Um eine schlechte Analogie zu verwenden - meine Freunde sind nicht unbedingt die Freunde meines Vaters.

Die C ++ FAQ hat ein bisschen mehr Details:

Michael Burr 26.01.2010, 21:27
quelle
6

Ein Freund von Derived kann genau auf das zugreifen, was Derived selbst kann - also jedes Mitglied von Derived und jedes öffentliche oder geschützte Mitglied einer Basisklasse oder einer öffentlichen oder geschützten übergeordneten Klasse , aber nicht alle privaten Mitglieder von Basisklassen oder Mitglieder von privaten übergeordneten Klassen.

    
Mike Seymour 26.01.2010 21:27
quelle
2

Auf private Mitglieder kann in abgeleiteten Klassen nicht zugegriffen werden.

    
Anon. 26.01.2010 21:25
quelle
2

Die Friend-Funktion hat Zugriff auf alle Mitglieder von Derived . Es hat keinen Zugriff auf Member von Base , auf die Derived nicht zugreifen kann. Abgeleitet kann nicht auf Base :: c zugreifen, da Base :: c privat ist.

    
Liz Albin 26.01.2010 21:29
quelle

Tags und Links