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.
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
.
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:
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.
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: