Объект, вызывающий объект - PullRequest
3 голосов
/ 07 октября 2011

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

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

Ответы [ 5 ]

5 голосов
/ 07 октября 2011
this pointer:

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

void setdata(int ii)
{
   i=ii;         // one way to set data
   this->i=ii;   // another way to set data
}
3 голосов
/ 07 октября 2011

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

0 голосов
/ 07 октября 2011
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
   }
};
0 голосов
/ 07 октября 2011

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

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 голосов
/ 07 октября 2011

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

a.Multiply(b);
....
Numbers::Numbers Multiply(Numbers auggend)
{
  return (this->value) * (auggend.value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...