Na linguagem C++ é possível burlar o encapsulamento de dados com o uso de ponteiros, diferentemente de como ocorre em Java já que nessa não é possível a manipulação direta de ponteiros.
Exemplificamos abaixo uma maneira de fazer o descrito acima:
Classe Arquitetura:
#include <iostream>
class Arquitetura
{
private:
int a;
public:
Arquitetura(int v){a = v;}
int* endereco(){return &a;}
int getA(){return a;}
};
Método Principal
#include <iostream.h>
#include “Arquitetura.h”
int main(){
int* p;
Arquitetura o(3);
p = o.endereco();
*p = 10;
cout << o.getA() << endl;
return 0;
}
Na classe Arquitetura é declarada uma variável com visibilidade private de tipo inteiro, variável esta que não é possível fazer o acesso por causa da visibilidade, mas através de aritmética de ponteiros acessaremos a variável e modificaremos seu valor; o método endereço retorna o endereço da variável private ‘a’; o método getA retorna o valor da variável ‘a’; e o construtor da classe seta o valor default da variável ‘a’.
No método principal declaramos o ponteiro de inteiros ‘p’ que receberá o endereço da variável ‘a’ através do método endereço da classe Arquitetura; após o ponteiro ‘p’ receber o endereço da variável ‘a’ modificamos o valor para o qual ‘p’ aponta para 10 e posteriormente imprimimos a variável ‘a’ através do método getA que retornará 10. Dessa forma mostramos que é possível modificar o valor de uma variável de visibilidade private em outra classe.