7. Указатель this и его использование.

При вызове функции,  принадлежащей классу,  для обработки данных конкретного объекта,  этой функции автоматически передается указатель на тот объект, для которого функция вызвана.  Этот указатель  имеет  фиксированное имя this  и (“тайно”) определен в каждой функции класса следующим образом:

имя_класса *const this = адрес_объекта;

Изменить указатель this нельзя,  так как это константный указатель. Он указывает именно на тот объект, для которого функция вызывается. This —является дополнительным (скрытым) параметром каждой нестатической компонентной функции. Объект, который адресуется указателем this, становится доступным внутри принадлежащей классу функции именно с помощью указателя this.

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

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

Ниже приведён пример класса, объекты которого формируют двухсвязный список с использованием указателя  this.

.h

using namespace std;

 

class Datee

{

                int d, m, y;

public:

                Datee(int d, int m, int y)

                {

                               this->d = d;

                               this->m = m;

                               this->y = y;

                }

                Datee(int dd, int mm) : d(dd), m(mm), y(2006) {};

                Datee(int);

 

                void display()

                {

                               cout << "Date is " << d << " " << m << " " << y << "\n";

                }

};

 

Datee::Datee(int dd)

{

                d = dd;

                m = 3;

                y = 2006;

}

 

.cpp

#include "c_console.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

                Datee d(1, 3, 2006);

                d.display();

                _getch();

                return 0;

}

Hosted by uCoz