8.5.2 Функции Члены

Функция, описанная как член, (без спецификатора friend (#8.5.10)) называется функцией членом и вызывается с исползованием синтаксиса члена класса (#7.1). Например:

struct tnode (* char tword[20]; int count; tnode *left; tnode *right; void set (char* w,tnode* l,tnode* r); *);

tnode n1, n2; n1.set («asdf», amp;n2,0); n2.set («ghjk»,0,0);

Определение функции члена рассматривается как находящеся в области видимости ее класса. Это значит, что она может непосредственно использовать имена ее класса. Если определние функции члена лексически находится вне описания класса, то имя функции члена должно быть уточнено именем класса с пмощью операции ::. Определения функций обсуждаются в #10.

Например:

void tnode.set (char* w,tnode* l,tnode* r) (* count = strlen (w); if (sizeof (tword)«=count) error („tnode string too long“); strcpy (tword,w); left = l; right = r; *)

Запись tnode.set определяет то, что функция set является членом класса tnode и принадлежит его области видисости. Имна членов tword, count, left и right относятся к объекту, для которого была вызвана функция. Так, в вызове n1.set(«abc»,0,0) tword ссылается на n1.tword, а в вызове n2. set(«def»,0,0) оно ссылается на n2.tword. Предполагается, что функции strlen, error и strcpy описаны где-то в другом месте, см. #10.

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

Функция член может быть определена (#10) в описании класса, и в этом случак она является inline (#8.1). Например:

int b; struct x (* int f () (* return b; *) int f () (* return b; *) int b; *);

означает

int b; struct x (* int f (); int b; *); inline x::f () (* return b; *)

Применение операции получения адреса к функциям членам допустимо. Однако, тип параметра результирующего указателя на функцию неопределн, поэтому любое использование его является зависимым от реализации.