Ponteiros – Para tirar dúvidas Pt 2

Seguindo a mesma idéia do post anterior, dou uma continuidade no tópico de como utilizar ponteiros.

Agora vou focar em como acessar atributos de um objeto instanciado a partir de um ponteiro de uma classe:

1
2
3
4
5
6
7
8
9
10
11
12
class MinhaClasse{
private:
int x;
public:
MinhaClasse(){ x = 0; }
 
MinhaClasse(int x){
this->x = x;
}
void setX(int x){ this->x = x;}
int getX(void){return this->x;}
};

E na main.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main(void){
 
/*Criando uma instancia da MinhaClasse,
usando o contrutor padrao.
*/
MinhaClasse instancia;
 
/*Criando uma instancia da MinhaClasse a partir de um ponteiro
da classe.
Usando construtor parametrizado.
*/
MinhaClasse * instanciaPonteiro = new MinhaClasse(10);
 
/*Criando um vetor de MinhaClasse apartir de um ponteiro
da classe.
Nesse caso ele utiliza o construtor padrão.
*/
MinhaClasse * vetorDeClasses = new MinhaClasse[15];
 
//===========Acessando Pos metodos:===========
cout << instancia.getX() << endl;
 
cout << instanciaPonteiro->getX() << endl;
 
for (int i=0; i < 15;i++)
    vetorDeClasses[i].setX(i);
 
for (int i=0; i < 15;i++)
    cout << vetorDeClasses[i].getX() <<endl;
 
return 0;
}

Com esse código o que teremos de saída será:
“0
10
1
2

15″

Dessa forma, o que podemos notar é que:

  • Ao instanciar uma classe, acessamos seus atributos da forma:
    “instancia.atributo”, ou “instancia.getAtributo()” para atributos privados.
  • Para uma instancia a partir de um ponteiro, devemos usar no padrão:
    “instanciaPonteiro->atributo” ou “instanciaPonteiro->getAtributo()” no caso de atributos privados.
  • Para acessar um atributo de uma instancia de um vetor(feito a partir de um ponteiro), usamos da seguinte forma:
    “vetorDeClasses[posicao].atributo” ou “vetorDeClasses[posicao].getAtributo()” no caso de atributos privados.

Vcs me perguntam: “O que raios quer dizer esse ->?”
Esse “->” nada mais é do que um atalho para “acessar um atributo/método de uma instância através do conteúdo de um ponteiro”. Isso é:

instanciaPonteiro->atributo = (*instanciaPonteiro).atributo

Por enquanto é só isso, caso esteja com duvidas em coisas mais básicas sobre ponteiros, dê uma olhada no post anterior.

Abraços.

Tags: , ,

About arruda

Adoro programar, descobrir novas frameworks ágeis e suas diversas aplicações.