C ++: Öffentliches Mitglied eines privaten geschachtelten Klassentyps

8

Ich habe den folgenden Code:

%Vor%

NestedBase class ist eine private geschachtelte Klasse von Base , daher scheint es, dass Zeile B nicht kompiliert wird. Andererseits hat die Variable b das öffentliche Mitglied nested , und ich kann ihre Methode Do() von außerhalb von Base aufrufen (wie in Zeile A). Welche genauen Regeln regeln den Zugriff auf die private geschachtelte Klasse (oder ihre Mitglieder) in einem solchen Fall? Was sagt der Standard dazu?

    
undermind 23.01.2016, 15:06
quelle

2 Antworten

6

Gemäß dem Standard $ 11.7 / 1 Geschachtelte Klassen [class.access.nest] :

  

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

Also, es ist ziemlich einfach. NestedBase ist ein private Mitglied der Klasse Base , daher kann Base::NestedBase nicht in main() aufgerufen werden.

b.nested.Do(); ist in Ordnung, weil nested und Do() beide public -Member sind. Die Tatsache, dass NestedBase eine private geschachtelte Klasse von Base ist, spielt keine Rolle, ist hier irrelevant.

    
songyuanyao 23.01.2016 15:14
quelle
2

Der Typname NestedBase ist ein privates Mitglied der Klasse.

%Vor%

Sie können also nicht explizit außerhalb der Klasse, in der der Name deklariert ist, darauf zugreifen.

Aber Sie können den Namen implizit folgendermaßen aufrufen:)

%Vor%     
Vlad from Moscow 23.01.2016 15:32
quelle