É um recurso… faz sentido em seu contexto, mas não traz vantagem alguma por si só – ao contrário da evangelização dos fanáticos.
De qualquer forma, o C++ não bloqueia tanto o acesso do programador quanto é pregado.
Por exemplo, voltemos lá atrás no artigo Portanto GDBM para Lua: havia uma classe
GdbmObject
com um descritor de arquivo de banco de dados privado.Digamos que, por alguma razão bizarra, queiramos ter acesso direto ao descritor.
Mas o atributo é privado!
Vamos ao bacalhau:
class GdbmObjectCorrupting {
public:
bool closed;
GDBM_FILE fd;
}
Repare que os atributos públicos aqui têm o mesmo tipo e o mesmo nome dos atributos privados da classe original. Isso garantirá que os símbolos gerados sejam idênticos – e este é o truque.
Agora imagine que temos a instância
obj
de GdbmObject
, da qual queremos acessar os atributos privados. A mágica é:GdbmObjectCorrupting *aux =
reinterpret_cast<GdbmObjectCorrupting *>(obj);
Pronto! Já está feit
No escopo de
aux
, aux->fd
dá acesso direto ao descritor de obj
, assim como aux->closed
dá acesso ao booleano closed
de obj
.Agora, este artigo é uma prova de conceito! Não aconselho ninguém a fazer isso. Aliás o Kodumaro desaprova fortemente tal prática: reitero, é apenas uma prova de conceito.
[]'s
Cacilhas, La Batalema