5.2.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 ) (* // делает сложную часть работы *) *)

В функции члене имена членов могут использоваться без явной ссылки на объект. В этом случае имя относится к члену того объекта, для которого функция была вызвана.