2011-10-07 3 views
3

Может кто-нибудь объяснить мне указатель (*this) и продемонстрировать, как он будет использоваться до объекта, вызывающего другой объект того же класса. Я не понимаю, как бы вы ссылались на два числа в функции-члене из двух разных объектов с одним и тем же именем переменной. Например, умножая два числа.Объект, вызывающий объект

a.Multiply(b); 
//.... 
Numbers::Numbers Multiply(Numbers auggend) 
{ 
} 

ответ

5
this pointer: 

Функции-члены каждого объекта имеют доступ к указателю с именем this, который указывает на объект itself.When мы называем членом функция, она возникает со значением this, установленным на адрес объекта, для которого он был вызван. Используя указатель this, любая функция-член может узнать адрес объекта, членом которого он является. Он также может быть используется для доступа к данным в объекте, на который он указывает. Пример:

void setdata(int ii) 
{ 
    i=ii;   // one way to set data 
    this->i=ii; // another way to set data 
} 
+0

+1 за ответ – desprado

0

(* this) является указателем на вашу установку класса. В вашем примере, если номера класса имели значение данных «значение»:

a.Multiply(b); 
.... 
Numbers::Numbers Multiply(Numbers auggend) 
{ 
    return (this->value) * (auggend.value); 
} 
+0

заметит, что 'возвращаемого значения * auggend.value 'также верно – Simon

+0

so (this-> value), указывает на переменную« значение »в объекте« a »и« (auggend.value) »; ссылается на переменную «значение» в multiply paramater? – user954004

+0

Действительно, они есть. Причина (это * -> * значение) vs (auggend *. * Value) оставлена ​​как упражнение для читателя ;-). – whitey04

3

this pointer хранит адрес экземпляра класса и может быть использован для определения значений

0

Во-первых, ваш пример выглядит не совсем правильно. Я считаю, что должно быть:

Numbers Numbers::Multiply(Numbers auggend) 
{ 
} 

Во всяком случае, с тем, что, this просто переменная типа Numbers * const, что указывает на переменную члена. Итак, из вашего примера a.Multiply(b), this будет хранить значение &a.

Допустим, вы имели некоторые другие функции, которые взяли Numbers *:

void DoSomething(Numbers *num); 

Вы можете затем вызвать эту функцию с this:

Numbers Numbers::Multiple(Numbers auggend) 
{ 
    DoSomething(this); 
    DoSomething(&auggend); 
} 
0
class A{ 
    int num; 
    void foo(int num) 
    { 
     num = 10; //local variable num is set to 10 
     this->num = 10 ; //class member num is set to 10 
    } 
}; 
Смежные вопросы