Una clase anidada es una clase que se declara en otra clase envolvente. Una clase anidada es un miembro y, como tal, tiene los mismos derechos de acceso que cualquier otro miembro. Los miembros de una clase envolvente no tienen acceso especial a los miembros de una clase anidada; se respetarán las normas habituales de acceso.
Por ejemplo, el programa 1 compila sin ningún error y el programa 2 falla en la compilación.
Programa 1
#include<iostream> using namespace std; /* start of Enclosing class declaration */ class Enclosing { private: int x; /* start of Nested class declaration */ class Nested { int y; void NestedFun(Enclosing *e) { cout<<e->x; // works fine: nested class can access // private members of Enclosing class } }; // declaration Nested class ends here }; // declaration Enclosing class ends here int main() { }
Programa 2
#include<iostream> using namespace std; /* start of Enclosing class declaration */ class Enclosing { int x; /* start of Nested class declaration */ class Nested { int y; }; // declaration Nested class ends here void EnclosingFun(Nested *n) { cout<<n->y; // Compiler Error: y is private in Nested } }; // declaration Enclosing class ends here int main() { }
Referencias:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA