ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн

Указатель this

Методы каждого объекта имеют доступ к некому волшебному указателю под на-

званием this, который ссылается на сам объект. Таким образом, любой метод мо-

жет узнать адрес, образно говоря, дома, в котором он прописан, то есть адрес сво-

его родного объекта. В следующем примере мы покажем механизм работы с этим

загадочным указателем.

Листинг 11.19. Программа WHERE

// where.cpp

// указатель this

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

class where

  {

  private:

    char charray[10];  //массив из 10 байтов

  public:

    void reveal()

      { cout << "\nМой адрес – не дом и не улица, мой адрес - " << this; }

                       // вывести адрес объекта

  };

///////////////////////////////////////////////////////////

int main()

{

  where w1, w2, w3;    //создать три объекта

  w1.reveal();         //посмотреть, где они находятся

  w2.reveal();

  w3.reveal();

  cout << endl;

  return 0;

}

В функции main() данной программы создаются три объекта типа where. За-

тем печатаются их адреса с помощью метода reveal(). Этот метод просто выводит

значение указателя this. Вот как это выглядит на экране:

Мой адрес - не дом и не улица, мой адрес - 0x8f4effec

Мой адрес - не дом и не улица, мой адрес - 0x8f4effe2

Мой адрес - не дом и не улица, мой адрес - 0x8f4effd8

Так как данные объектов хранятся в массивах, размер каждого из которых

равен 10 байтов, то объекты в памяти отделены друг от друга десятью байтами

(EC-E2=E2-D8=10 (дес)). Впрочем, некоторые компиляторы могут творчески

подойти к расположению объектов и выделить под каждый чуть больше, чем

10 байтов.

 

25