Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ссылки на Себя



В функции члене на члены (поля) объекта, для которого она была вызвана, можно ссылаться непосредственно. Например:

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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.156 с)...