É possível acessar membros privados de uma classe?
Pergunta
É possível acessar membros privados de uma classe em C ++.
desde que você não tem um amigo função e Você não tem acesso a a definição de classe
Solução
Você quer dizer usando algumas aritmética de ponteiro para obter o acesso? É possível, mas é definitivamente perigoso. Dê uma olhada esta pergunta também: Acessando membros privados
Outras dicas
Eu acho que havia algum truque da velha escola como esta:
#define private public
#include "header.h"
#define private private
Mas você é fortemente desencorajada de fazer isso (eu li rapidamente que o algo sobre isso no C ++ padrão disse) - se você quiser ler mais sobre isso no Google por "público-privada #define"
Bem, eu poderia estar falando rubish, mas eu acho que você poderia tentar definir uma classe "gêmeo" com os mesmos membros como a classe que você deseja modificar, mas / modificadores privadas público diferente e, em seguida, usar reintepret_cast para lançar a classe original para o seu em que você pode acessar os membros privados.
É um pouco hacky; -)
Um pouco de código para explicar a idéia:
class ClassWithNoAccess
{
public:
someMethod();
private:
int someVar;
};
class ClassTwin
{
public:
someMethod();
public:
int someVar;
}
e em algum lugar no código:
ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;
edit: assim como alguém já escreveu antes, este trabalho poder, mas o padrão não garante a ordem das variáveis ??com modificador público e privado será o mesmo
Mesmo se fosse possível através de algum corte desagradável - ver posts anteriores - você deve não fazê-lo.
O encapsulamento existe para um propósito muito bom, e regulação da classe como meios privados que o desenvolvedor não tinha a intenção ninguém para cerca de mexer com esse membro. Isso deve significar
"Você não tem acessar este membro, a fim de usar a interface pública à sua medida pretendida cheio"