Функции-члены
Посмотрим, как можно представить в языке понятие даты, используя для этого тип структуры и набор функций, работающих с переменными этого типа:
struct date { int month, day, year; }; date today; void set_date(date*, int, int, int); void next_date(date*); void print_date(const 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_birthday;
void f() { my_birthday.set(30,12,1950); today.set(18,1,1991);
my_birthday.print(); today.next(); }
Поскольку разные структуры могут иметь функции-члены с одинаковыми именами, при определении функции-члена нужно указывать имя структуры:
void date::next() { if (++day > 28 ) { // здесь сложный вариант } }
В теле функции-члена имена членов можно использовать без указания имени объекта. В таком случае имя относится к члену того объекта, для которого была вызвана функция.