Programar em C++/Classes internas

Origem: Wikilivros, livros abertos por um mundo aberto.

Conceituação[editar | editar código-fonte]

As classes podem ser construídas uma dentro da outra para uma melhor organização do código. Esta possibilidade nos leva a implicações a serem consideradas durante a fase de implementação do código. Devemos verificar as particularidades de acesso a dados, o que nos leva a diversas particularidades devido ao escopo das mesmas.

No exemplo a seguir, temos a implementação básica de uma classe interna a outra:

class data     
{
 int n;
 char str[256];
  public:
  class idata
     { int x;
       int y;
       int z;
     };

     int getn();
     char *getstr();
     void setstr( const char *instr);
     void setn(int inn);
};

Uma vez que criamos o protótipo de objeto dentro de outra classe podemos usá-lo através do operador de resolução de escopo. Deveremos nos referir ao operador para acessar o corpo da primeira classe e depois o invocamos novamente para alcançar a outra. Desta forma, poderíamos usá-la como exemplificado abaixo:

data::idata ni;

É importante notar que objetos diferentes terão dados diferentes na região da classe interna, isso impede que usemos dados da classe mais externa dentro das classes internas. Devido a esta característica as funções dentro da classe interna não podem acessar dados da classe mais externa, a menos que sejam estáticos, o que não exige definição do objeto a qual eles pertencem. Portanto, o uso de classes internas permite um isolamento de parte dos dados e prover um tratamento diferenciado para os mesmos.