Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры / ООП(Тимофеев) / ООП-Тимофеев.doc
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
328.19 Кб
Скачать

Указатель this

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

class с_pair { public: void init (char b) { c2 = 1 + (cl = b); }

с_pair increment ( ) { c1++; c2++; return (*this); }

с_pair* where_am_I( ) ( return this; ) void print ( ) { cout << c1 << c2 << ' \ t'; }

privatе: char c1, c2; };

int main ( ) { с_pair а, b; a.init ('А'); a.print ( ); cout << " is at " << a.where_am_I ( ) << end l; b.init ('B'); b.print ( );

cout << “ is at ” << b.where_am_I ( ) << end l; b.increment ( ). print ( ) ;

}

Функция-член increment использует неявный указатель this, чтобы возвратить приращенные значения с1 и с2. Функция-член where_am_I возвращает адрес за­данного объекта. Ключевое слово this предоставляет встроенный не требующий объявления указатель. Это то же самое, как если бы в c_pair неявно объявлялся закрытый член c_pair* const this. Указатель this нельзя изменить.

Функции-члены типа static и const.

C++ позволяет использовать функции-члены типа static и const. Синтаксически статическая функция-член содержит модификатор static,предшествующий воз­вращаемому типу функции внутри объявления класса. Определение вне класса не должно включать этот модификатор:

class foo { . . . . . static int foo_fcn ( ); // сначала — ключевое слово static

. . . . .};

int foo::foo_fcn ( ) // здесь не должно быть слова static

{ /* определение функции */ }

Синтаксически, функция-член типа const вводится модификатором const, следу­ющим за списком аргументов внутри объявления класса. Определение вне класса также должно включать этот модификатор:

class foo {

. . . . .

int foo_fcn ( ) const;

. . . . .

int foo::foo_fcn ( ) const //необходимо ключевое слово const

{ /* определение функции */ }

Особенности применения функций-членов const и static можно усвоить, используя указатель this. Обычная функция-член, вызываемая как

х.mem ( i, j, k ) ;

имеет явный список аргументов и неявный список аргументов, а именно, список всех членов данных объекта х. Неявные аргументы могут пониматься как данные, доступные через указатель this. В противоположность этому, статическая функция-член не получает неявных аргументов. Постоянная функция-член не может модифицировать свои неявные аргументы. Объявление постоянных функций-членов и постоянных параметров называется контролем постоянства (const-correctness). Контроль постоянства — важное подспорье при написании кода. Благодаря такому контролю можно быть уверенным в том, что компилятор убедится в неизменности значений объектов. Кроме того, контроль постоянства позволяет компилятору производить специальную оптимизацию, например, расположить объект const в памяти только для чтения.

Соседние файлы в папке ООП(Тимофеев)