{ cot::count(500); …
//изменение статического компонента до объявления объектов
}
5) Указатели на компоненты класса
Определение указателя на компонентные данные класса:
тип данных(имя класса::*имя указателя)
В определение можно включить и инициализацию
& имя класса:: имя компонента
int (stroka::*plen)=&stroka::len;
// -не верно, т.к. len – имеет статус private
При инициализации надо использовать общедоступные компоненты.
После объявления объекта к его компонентам следующий формат обращения через указатель:
имя объекта.* указатель на компонент данных;
Если определен указатель на объект формат обращения:
Указатель на объект-> *указатель на компонент данных;
Определение указателей на компонентные функции
Тип возвращаемого результата (имя класса::*имя указателя на метод)
(спецификация параметров функции);
void (book::*fprt)(void) = & book::show_book;
// определение указателя на компонентные функции класса book и
// инициализация указателя компонентной функцией show_book
И форматы обращения к методам через указатели:
|
|
Имя объекта.*указатель на метод(параметры);
Указатель на объект-> *указатель на метод (параметры);
Пример:
book A (“C и C++”, “Б.И.Березин, 40.0); // определен объект
void (book::*fprt)(void) = & book::show_book;
(A.*fptr) () // выведет на печать значения объекта
Если в определении класса было бы несколько идентичных функций указатель fptr можно “настроить” на другие функции
Компонентные функции
Если определение функции полностью размещено в классе, то эта функция по умолчанию считается подставляемой, т.е. при каждом вызове код функций встраивается в точку вызова.
При внешнем определении в теле класса располагается прототип функции:
<Тип> <имя функции >(спецификация формальных параметров);
Вне тела класса компонентная функция определяется следующим образом:
<Тип ><имя класса>::<имя функции>(спецификация формальных
Параметров)
{ тело функции };
Функция компонент класса имеет туже область видимости, что и класс.