Страница:
164 из 357
1 Функции Члены
Рассмотрим реализацию понятия даты с использованием struct для того, чтобы определить представление даты date и множества функций для работы с переменными этого типа:
struct date (* int month, day, year; *); // дата: месяц, день, год *) date today; void set_date(date*, int, int, int); void next_date(date*); void print_date(date*); // ...
Никакой явной связи между функциями и типом данных нет. Такую связь можно установить, описав функции как члены:
struct date (* int month, day, year;
void set(int, int, int); void get(int*, int*, int*); void next(); void print(); *);
Функции, описанные таким образом, называются функциями членами и могут вызываться только для специальной переменной соответствующего типа с использованием стандартного синтаксса для доступа к членам структуры. Например:
date today; // сегодня date my_burthday; // мой день рождения
void f() (* my_burthday.set(30,12,1950); today.set(18,1,1985);
my_burthday.print();
today.next(); *)
Поскольку разные структуры могут иметь функции члены с одинаковыми именами, при определении функции члена необходимо указывать имя структуры:
void date::next() (* if ( ++day » 28 ) (* // делает сложную часть работы *) *)
В функции члене имена членов могут использоваться без явной ссылки на объект. В этом случае имя относится к члену того объекта, для которого функция была вызвана.
5.2.2 Классы
Описание date в предыдущем подразделе дает множество функций для работы с date, но не указывает, что эти функции должны быть единственными для доступа к объектам типа date. Это ограничение можно наложить используя вместо struct class:
class date (* int month, day, year; public: void set(int, int, int); void get(int*, int*, int*); void next(); void print(); *);
Метка public: делит тело класса на две части. Имена в первой, закрытой части, могут использоваться только функциями членами.
|< Пред. 162 163 164 165 166 След. >|