Por que e como utilizar Classes Aninhadas em C++

ūü™ļ Mais conhecidas em ingl√™s como: Nested classes.


Por que e como utilizar Classes Aninhadas em C++


Em C++ uma classe pode ser declarada dentro do escopo de outra classe, essa pr√°tica √© conhecida como: ‚Äúclasses aninhadas‚ÄĚ.

Classes aninhadas são consideradas dentro do escopo da classe envolvente e estão disponíveis para uso dentro desse escopo. Para se referir a uma classe aninhada de um escopo diferente do seu escopo envolvente imediato, você deve usar um nome totalmente qualificado.


Exemplo b√°sico de uso

Veja esse exemplo, onde a class B está dentro da classe A. Podemos tanto criar o objeto da classe A como também criar um objeto da classe B utilizado a resolução de escopo da classe A.

#include <iostream>

class A {
  public:
    class B {
      public:
        B(){}
        void print(){
          std::cout << "Eu sou B\n";
        }
    };
};

int main(){
  A::B b;
  b.print();
}

Os membros e fun√ß√Ķes-membro s√£o intercambi√°veis entre essas duas classes, e os mesmos podem ser sobrecarregados. Por exemplo, se tiv√©ssemos uma fun√ß√£o-membro de mesmo nome e tipo em A, eu poderia utiliz√°-la sem nenhum problema:

#include <iostream>

class A {
  public:
    void print(){
      std::cout << "Eu sou A\n";
    }
    class B {
      public:
        B(){}

        void print(){
          std::cout << "Eu sou B\n";
        }
    };
};

int main(){
  A a;
  a.print();
  A::B b;
  b.print();
}

E l√≥gico, os privil√©gios de acesso tamb√©m se mant√©m, se uma dessas fun√ß√Ķes-membro fosse private, a regra de n√£o acesso se mant√©m.


Por que usar classes aninhadas?

O principal motivo de usar classes aninhadas √© justamente pelo fato de ocultar dados, ou seja, sabe aquelas API‚Äôs p√ļblicas que voc√™ pode instanciar uma classe atrav√©s de uma URL? Ent√£o, elas fazem uso de classes aninhadas, e l√≥gico, com todas as medidas de prote√ß√£o de dados tamb√©m, al√©m de n√£o polu√≠rem o namespace.


Para mais informa√ß√Ķes sobre classes aninhadas acesse:


cpp cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gr√°ficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma f√°cil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!