C ++ verschachtelte Klassen - innere / äußere Beziehung

8

Ich habe einige Artikel über Nested Classes in unserer Community und außerhalb gelesen und bin ziemlich verwirrt.

Soweit ich weiß, unterscheiden sich geschachtelte Klassen in C ++ nicht von separaten / unabhängigen Klassen.

Während ich versuchte, das Konzept besser zu verstehen, schrieb ich einen einfachen Code und ich fand heraus, dass eine innere Klasse auf eine äußere Klasse zugreifen kann, ohne von der äußeren Klasse Freundschaft zu bekommen.

Beispiel:

%Vor%

Sie können sehen, dass die Inner-Klasse, die in der Outer-Klasse geschachtelt ist, Zugriff auf ihre Datenelemente (die Outer-Klasse) hat, während die Lonesome als unabhängige Klasse nicht auf das Outer-Klassendatenelement zugreifen kann.

Ich entschuldige mich, wenn das eine doppelte oder dumme Frage ist, aber ich möchte nur mit euch bestätigen, dass es einen Unterschied zwischen einer Nested Class und einer unabhängigen Klasse gibt (zwei verschiedene Klassen, die das nicht tun) haben innere / äußere Beziehung).

Danke euch allen, Syndikator =]

    
SyndicatorBBB 30.01.2013, 15:12
quelle

3 Antworten

21

In dieser Hinsicht gibt es einen Unterschied zwischen C ++ 03 und C ++ 11. Die Antwort hängt also davon ab, welchen Compiler Sie verwenden.

Wenn Sie einen C ++ 03-kompatiblen Compiler verwenden, dann:

Die geschachtelte Klasse kann nicht auf alle Member der einschließenden Klasse zugreifen.

Wenn Sie C ++ 11-kompatiblen Compiler verwenden, dann:

Die geschachtelte Klasse kann auf alle Member der umschließenden Klasse zugreifen. Geschachtelte Klasse wird nur als ein anderes Mitglied der Klasse behandelt.

C ++ 03 Standard 11.8 Verschachtelte Klassen:
§1

  

Die Mitglieder einer geschachtelten Klasse haben keinen besonderen Zugriff auf Mitglieder einer einschließenden Klasse oder auf Klassen oder Funktionen, die einer einschließenden Klasse Freundschaft gewährt haben; die üblichen Zugangsregeln sind einzuhalten.

C ++ 11 Standard 11.7 Verschachtelte Klassen:

  

Eine verschachtelte Klasse ist ein Mitglied und hat als solches die gleichen Zugriffsrechte wie jedes andere Mitglied.

    
Alok Save 30.01.2013, 15:20
quelle
3

Aus Abschnitt 11.7 des Standards:

  

1 - Eine verschachtelte Klasse ist ein Mitglied und hat als solches die gleichen Zugriffsrechte wie jedes andere Mitglied. Die Member einer umschließenden Klasse haben keinen speziellen Zugriff auf Member einer verschachtelten Klasse [...]

Also ist eine verschachtelte ("innere") Klasse effektiv ein Freund der einschließenden Klasse.

    
ecatmur 30.01.2013 15:17
quelle
2

Sie haben Ihre Frage selbst beantwortet:

  

Sie können sehen, dass die Inner-Klasse, die in der Outer-Klasse geschachtelt ist, Zugriff auf ihre Datenelemente (die Outer-Klasse) hat, während die Lonesome als unabhängige Klasse nicht auf das Outer-Klassendatenelement zugreifen kann.

Beachten Sie im Gegensatz zu Java in C ++, dass Sie nicht auf nicht statische Mitglieder von Outer class zugreifen können.

Es ist oft üblich, einen Verweis auf Outer class auf Inner class anzugeben.

%Vor%     
borisbn 30.01.2013 15:29
quelle

Tags und Links