Когда функция-член класса вызывается для обработки данных конкретного объекта, этой функции автоматически и неявно передается указатель на тот объект, для которого функция вызвана. Этот указатель имеет имя this и неявно определен в каждой функции класса следующим образом
имя_класса *const this = адрес_объекта
Указатель this является дополнительным скрытым параметром каждой нестатической компонентной функции. При входе в тело принадлежащей классу функции this инициализируется значением адреса того объекта, для которого вызвана функция. В результате этого объект становится доступным внутри этой функции.
В большинстве случаев использование this является неявным. В частности, каждое обращение к нестатической функции-члену класса неявно использует this для доступа к члену соответствующего объекта. Например, функцию add в классе complex можно определить эквивалентным, хотя и более пространным способом:
void complex add(complex ob)
{this->re=this->re+ob.re;
// или *this.re=*this.re+ob.re
this->im=this->im+ob.im;}
Если функция возвращает объект, который ее вызвал, используется указатель this.
Например, пусть функция add возвращает ссылку на объект. Тогда
complex& complex add(complex& ob)
{re=re+ob.re;
im=im+ob.im;
return *this;
}
Примером широко распространенного использования this являются операции со связанными списками.
Пример. Связанный список.
#include <iostream.h>
//Определение класса
class item
{
static item *begin;
item *next;
char symbol;
public:
item (char ch){symbol = ch;} // конструктор
void add(void); // добавить в начало
static void print(void);
};
//Реализация класса
void item :: add(void)
{
this –>next = begin;
begin = this;
}
void item : : print(void)
{
item *p;
p = begin;
while(p != NULL )
{
cout<<p –>symbol<<“ \t ”;
p = p –>next;
}
}
//Создание и просмотр списка
item *item : : begin = NULL; // инициализация статического компонента
void main()
{
item A(‘a’); item B(‘b’); item C(‘c’);
// включение объектов в список
A.add(); B.add(); C.add();
// просмотр списка в обратном порядке
item : : print();
}