Справочное руководство по C++

       

Функции члены


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

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",n2,0); n2.set ("ghjk",0,0);

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

typedef-имя . простое_оп_имя

см. 3.3. Определения функций обсуждаются в . Например:

void tnode.set (char* w,tnode* l,tnode* r) { count = strlen (w); if (sizeof (tword)

Имя функции tnode.set определяет то, что множество функций является членом класса tnode. Это позволяет использовать имена членов word, count, left и right. В функции члене имя члена ссылается на объект, для которого была вызвана функция. Так, в вызове n1.set(...) tword ссылается на n1.tword, а в вызове n2.set(...) он ссылается на n2.tword. В этом примере предполагается, что функции strlen, error и strcpy описаны где-то в другом месте как внешние функции (см. ).

В члене функции ключевое слово this указывает на объект, для которого вызвана функция. Типом this в функции, которая является членом класса cl, является cl*. Если mem - член класса cl,то mem и this-mem - синонимы в функции члене класса cl (если mem не был использован в качестве имени локальной переменной в промежуточной области видимости).

Функция член может быть определена () в описании класса. Помещение определения функции члена в описание класса является кратким видом записи описания ее в описании класса и затем определения ее как inline () сразу после описания класса. Например:

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; }

Для функций членов не нужно использование спецификатора overload (): если имя описывается как означающее несколько имен в классе, то оно перегружено (см. ).

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



Содержание раздела