Burlando Encapsulamento

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.

Deixe uma resposta