![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В функции члене на члены (поля) объекта, для которого она была вызвана, можно ссылаться непосредственно. Например:
class x {
int m;
public:
int readm() { return m; }
};
x aa;
x bb;
void f()
{
int a = aa.readm();
int b = bb.readm();
//...
}
В первом вызове 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);
}
Чтобы присоединить звено к списку необходимо обновить объекты, на которые указывают указатели this, pre и suc (текущий, предыдущий и последующий). Все они типа dlink, поэтому функция член dlink::append() имеет к ним доступ.
Дата публикования: 2015-01-13; Прочитано: 205 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!