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

R.9.3 Функции-члены.

   


Назад  |  Вперёд

Функция, описанная как член (без спецификации friend $$R.11.4), называется функция-член и вызывается в соответствии с синтаксисом члена класса ($$R.5.2.4), например:

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

Здесь set является функцией-членом и может вызываться так:

           void f(tnode n1, tnode n2)
           {
              n1.set("abc",&n2,0);
              n2.set("def",0,0);
           }

Считается, что определение функции-члена принадлежит области видимости ее класса. Это означает, что в функции-члене (если она нестатическая, $$R.9.4) можно непосредственно использовать имена членов ее класса. В статической функции-члене можно непосредственно использовать имена только статических членов, элементов перечисления и вложенных типов. Если определение функции-члена находится вне описания класса, ее имя следует уточнить именем класса с помощью операции ::, например:

           void tnode::set(char* w, tnode* l, tnode* r)
           {
             count = strlen(w)+1;
             if (sizeof(tword)<=count)
                error("tnode string too long");
             strcpy(tword,w);
             left = 1;
             right = r;
           }

Обозначение tnode::set указывает, что функция set является членом и находится в области видимости класса tnode. Имена членов tword, count, left и right относятся к членам того объекта, с именем которого вызывалась Поэтому в вызове n1.set("abc",&n2,0) tword обозначает n1.tword, а в вызове n2.set("def",0,0) tword обозначает n2.tword. Функции strlen, error и strcpy должны быть описаны где-то в программе.

Члены можно определять ($$R.3.1) вне описания класса; если в описании класса они были описаны, но не определены, их не следует описывать заново, см. $$R.3.3. После определения класса функции-члены этого класса можно использовать при описании друзей. Всякая вызываемая в программе функция-член должна иметь в точности одно определение.

Результат вызова нестатической функции-члена ($$R.9.4) класса X, когда она вызывается не с объектом класса X, неопределен.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.