|
||||
|
5.2.3 Ссылки на Себя В функции члене на члены объекта, для которого она была вызвана, можно ссылаться непосредственно. Например: class x (* int m; public: int readm() (* return m; *) *); x aa; x bb; void f() (* int a = aa.readm(); int b = bb.readm(); // ... *) В первом вызове члена member() m относится к aa.m, а во втором – к bb.m. Указатель на объект, для которого вызвана функция член, является скрытым параметром функции. На этот неявный параметр можно ссылаться явно как на this. В каждой функции класса x указатель this неявно описан как x* this; и инициализирован так, что он указывает на объект, для которого была вызвана функция член. this не может быть описан явно, так как это ключевое слово. Класс x можно эквивалентным образом описать так: class x (* int m; public: int readm() (* return this-»m; *) *); При ссылке на члены использование this излишне. Главным образом this используется при написании функций членов, котрые манипулируют непосредственно указателями. Типичный пример этого – функция, вставляющая звено в дважды связанный список: class dlink (* dlink* pre; // предшествующий dlink* suc; // следующий public: void append(dlink*); // ... *); void dlink::append(dlink* p) (* p-»suc = suc; // то есть, p-»suc = this-»suc p-»pre = this; // явное использование this suc-»pre = p; // то есть, this-»suc-»pre = p suc = p; // то есть, this-»suc = p *) dlink* list_head; void f(dlink*a, dlink *b) (* // ... list_head-»append(a); list_head-»append(b); *) Цепочки такой общей природы являются основой для списквых классов, которые описываются в Главе 7. Чтобы присоеднить звено к списку необходимо обновить объекты, на которые указывают указатели this, pre и suc (текущий, предыдущий и последующий). Все они типа dlink, поэтому функция член dlink::append() имеет к ним доступ. Единицей защиты в С++ яляется class, а не отдельный объект класса. |
|
||