Publicado em Programação

O apontador “this” – C++

Este apontador especial é utilizado pelas funções membro de uma classe para apontar para as instâncias dessa mesma classe.
Isto significa que se os objectos a,b e c foram instanciados a partir da classe X, posso utilizar o apontador this para lhes aceder.
Um exemplo muito simples.
Exemplo sem utilizar o apontador this:

#include
using namespace std;
class X{
public:
X(){valor = 0;}
void setValor(int novovalor){valor = novovalor;}
int getValor(){return valor;}
private:
int valor;
};
int main(){
X a, b, c;
b.setValor(3);
c.setValor(b.getValor()+1);
cout << "a = " << a.getValor() << endl; cout << "b = " << b.getValor() << endl; cout << "c = " << c.getValor() << endl; } [/sourcecode] Mesmo exemplo com o apontador this: [sourcecode language='cpp'] #include
using namespace std;
class X{
public:
X(){this->valor = 0;}
void setValor(int novovalor){this->valor = novovalor;}
int getValor(){return this->valor;}
private:
int valor;
};
int main(){
X a, b, c;
b.setValor(3);
c.setValor(b.getValor()+1);
cout << "a = " << a.getValor() << endl; cout << "b = " << b.getValor() << endl; cout << "c = " << c.getValor() << endl; } [/sourcecode] É possível a uma função membro aceder a um membro dado por qualquer um dos processos apresentados, ou seja, utilizando o apontador this ou não. A utilização explícita do operador this é necessária em algumas situações específicas, como é o caso de métodos que manipulam directamente apontadores e os que passam o objecto receptor como argumento a outras funções. Notas importantes:

  • o apontador this armazena o endereço da instância da classe, que possibilita o acesso utilizando apontadores aos membros da classe pelas respectivas funções membro;
  • o apontador this não é contabilizado quando se calcula o tamanho de um objecto;
  • o apontador this não está acessível a funções membro do tipo static;
  • o apontador this não pode ser alterado.

Fonte: http://www.codersource.net/cpp_tutorial_this_pointer.html

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s