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

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top