2009-02-28 8 views
14

Angenommen, ich habe eine Base Klasse:Wird Freundschaft in C++ geerbt?

class Base { 
    friend SomeOtherClass; 
}; 

Und es ist eine andere (verschiedene) Klasse, die von Base erbt:

class AnotherClass : public Base {} 

Ist Freundschaft als auch geerbt?

+0

Noch eine Frage, die mit einem COMPILER einfach beantwortet werden sollte. – shoosh

+8

@shoosh: Compiler entsprechen nicht unbedingt den Standards. Eine solche Frage sollte vom Standard beantwortet werden, nicht von Compilern. –

+0

@shoosh Welcher Compiler? VS für Windows oder g ++ für Unix? Welche Version von C++ Standard? Es gibt viele Fragen, die Sie stellen können, selbst wenn der Compiler funktioniert oder nicht funktioniert. – user3728501

Antwort

19

Im Prinzip eine abgeleitete Klasse erbt jedes Mitglied einer Basisklasse außer:

* its constructor and its destructor 
* its operator=() members 
* its friends 

Also, nein. Freunde werden nicht vererbt.

+5

Es ist interessant, dass Sie den genauen Wortlaut gewählt haben, um das als diese Webseite zu sagen: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce

+0

Vielleicht ist eine gute Frage, die Sie jetzt stellen können, dass Sie es so machen können, dass Freundschaft geerbt wird ? Es wäre sicherlich nützlich für das, was ich tue, anstatt eine Liste aller Klassen zu schreiben, die ich "Freundschaft" haben möchte. – user3728501

7

Nein, es ist nicht, wie hier dokumentiert: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4

+0

Das Beispiel in der Verknüpfung zeigt den umgekehrten Fall zur Frage des OP. Ich möchte hinzufügen, dass 'SomeOtherClass' Zugriff auf die' Base' Felder und Methoden hat, die in Objekten von 'AnotherClass' geerbt werden. –

9

Nein ist es nicht.

Edit: Zitat aus dem C++ Standard Abschnitt 11,4/8

Freundschaft weder noch transitiv vererbt wird.

Verwandte Themen