Apontadores em c++ [RESOLVIDO]

1. Apontadores em c++ [RESOLVIDO]

BRUNO WALLISON FERNANDES NUNES
BrunoFN

(usa Ubuntu)

Enviado em 05/07/2015 - 19:59h

Galera,Qual a Função do Apontador this em c++?,Nao to conseguindo entender esse conceito.
agradeço desde já!


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/07/2015 - 14:57h

O ponteiro this é uma referência para o próprio objeto usado para invocar uma função-membro (ou método, no linguajar de alguns).

O exemplo do Thiago, de usar o ponteiro para ter uma referência explícita a um membro da classe (e particularmente numa situação de potencial conflito de nomes), é um dos casos de uso, mas não é o único nem é o mais importante -- até porque o problema que ele mostrou geralmente é tratado simplesmente evitando os conflitos.

Dentro de uma função-membro, o valor do ponteiro this é igual ao endereço do objeto que foi usado para chamar a função. Esse ponteiro existe sempre no escopo de funções-membro não-estáticas, e é única a forma pela qual a função-membro consegue saber sobre qual objeto atuar, membro que você nem sempre o escreva explicitamente, lá ele estará.

class SomeClass {
private:
int val;

public:
SomeClass(int new_val): val(new_val) { }

void SomeFunc(int x){
/* Implicitamente equivalente a “this->val+=x” */
val+=x;
}

SomeClass &operator=(int other_val);
};


Para todos os efeitos, é como se o endereço do objeto fosse passado como argumento de todas as funções-membros da classe, até mesmo daquelas que não recebem parâmetros. (E, na verdade, é isso mesmo o que o compilador faz por trás das cortinas: ele transformaria algo parecido com obj.SomeFunc(10) em SomeClass::SomeFunc(&obj, 10).)

Algumas vezes, é preciso ser explícito. Como parte do funcionamento da função, você poderia precisar saber o valor do endereço do objeto, e informá-lo para alguma função que precise de tal informação. Mas algo muito comum é você querer não o ponteiro, mas sim uma referência ao próprio objeto. Nesses casos, você deve dizer *this (i.e. “conteúdo do endereço indicado por this”). Veja como ficaria a implementação da função operator=(), declarada acima.

SomeClass &SomeClass::operator=(int other_val){
val=other_val;
return *this;
}


Um artigo que explica mais detalhadamente pode ser encontrado em http://en.cppreference.com/w/cpp/language/this.

3. Re: Apontadores em c++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/07/2015 - 20:16h

Funciona mais ou menos assim: o "this" aponta para os atributos da classe, e não para a funçao. Exemplo:


class Classe{
int x, y, z;
char a, b, c;

public:
Classe(){
this->x = 0;
this->y = 0;
this->z = 0;
this->a = 'a';
this->b = 'b';
this->c = 'c';
}

Classe(int x, int y, int z, char a, char b, char c){
// Define os atributos da classe com os paramentros passados
this->x = x;
this->y = y;
this->z = z;
this->a = a;
this->b = b;
this->c = c;
}

void setX(int x){
this->x = x;
}

int getX(){
return this->x;
}
};


Um exemplo básico, mas em suma, ele aponta para os atributos da classe, e não para as variaveis da funcao.

Espero ter ajudado

Se ajudei, marque o tópico como resolvido e clique em melhor resposta

[]'s

T+

--
http://piadasnerds.com/wp-content/uploads/2011/08/grafico_souProgramador.png






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts