52867.fb2
Рассмотрим реализацию понятия даты с использованием 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 ) (* // делает сложную часть работы *) *)
В функции члене имена членов могут использоваться без явной ссылки на объект. В этом случае имя относится к члену того объекта, для которого функция была вызвана.