- •Базовое ядро языка Элементы программы.
- •Комментарии
- •Инструкция – выражение
- •Инструкция
- •Определение функции
- •Заголовок функции
- •Прототипы функций
- •Аргументы по умолчанию.
- •Перегрузка функций
- •Встраиваемые функции
- •Стек до блока Вошли в блок Вышли из блока
- •Индексирование
- •Int a [100]; одномерный массив
- •Int b [3][5]; двухмерный массив
- •Int c [7][9][2]; трехмерный массив
- •Передача массивов функциям
- •Объявления ссылок и вызовов по ссылке
- •Функции-члены класса
- •Доступ: закрытый и открытый
- •Область видимости класса
- •Оператор разрешения области видимости ::
- •Вложенные классы
- •Статические члены данных
- •Указатель this
- •Функции-члены типа static и const.
- •Изменчивость (mutable)
- •Создание и уничтожение объектов
- •Классы с конструкторами
- •Конструкторы как преобразования
- •Создание динамического стека
- •Классы с деструкторами
- •Пример: динамически размещаемые строки
- •Ad hoc полиморфизм
- •Алгоритм выбора перегруженной функции
- •Перегрузка операторов
- •Перегрузка бинарных операторов
- •Перегрузка операторов присваивания и индексирования
- •Перегруженные операторы ввода-вывода « и »
- •Перегрузка оператора ( ) для индексирования
- •Операторы указателей
- •Указатель на член класса
- •Перегрузка new и delete
- •Наследование.
- •Методология объективно-ориентированного проектирования
- •Виртуальные функции
- •Абстрактные базовые классы
Указатель 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 в памяти только для чтения.