Clases anidadas en C++

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

Categories C++

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *