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

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; *)

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

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

Из книги автора

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 является функцией-членом и может


R.9.3.2 Функции-члены со спецификацией inline

Из книги автора

R.9.3.2 Функции-члены со спецификацией inline Функцию-член можно определить (§R.8.3) в описании класса, в таком случае она считается подстановкой (inline, §R.7.1.2). Определять функцию в описании класса - это эквивалентно тому, чтобы описывать функцию и определять ее со спецификацией inline


R.12 Специальные функции-члены

Из книги автора

R.12 Специальные функции-члены Некоторые функции-члены считаются специальными, поскольку они влияют на то, как объекты класса создаются, копируются и уничтожаются, и как значения одного типа преобразуются в значения другого типа. Часто такие функции вызываются неявно.Эти


R.14.6 Функции-члены шаблонов типа

Из книги автора

R.14.6 Функции-члены шаблонов типа Функция-член шаблонного класса считается неявной шаблонной функцией, а параметры шаблона типа для ее класса - ее шаблонными параметрами. Приведем пример, в котором описаны три шаблона типа для функции:template‹class T› class vector { T* v; int


Константные функции-члены

Из книги автора

Константные функции-члены Назначение модификатора const в объявлении функций-членов – определить, какие из них можно вызывать для константных объектов. Такие функции-члены важны по двум причинам. Во-первых, они облегчают понимание интерфейса класса, ведь полезно сразу


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

Из книги автора

13.1.2. Функции-члены Пользователям, по-видимому, понадобится широкий набор операций над объектами типа Screen: возможность перемещать курсор, проверять и устанавливать области экрана и рассчитывать его реальные размеры во время выполнения, а также копировать один объект в


13.3. Функции-члены класса

Из книги автора

13.3. Функции-члены класса Функции-члены реализуют набор операций, применимых к объектам класса. Например, для Screen такой набор состоит из следующих объявленных в нем функций-членов:class Screen {public:void home() { _cursor = 0; }char get() { return _screen[_cursor]; }char get( int, int );void move( int, int );bool checkRange( int, int );int


13.5.1. Статические функции-члены

Из книги автора

13.5.1. Статические функции-члены Функции-члены raiseInterest() и interest() обращаются к глобальному статическому члену _interestRate:class Account {public:void raiseInterest( double incr );double interest() { return _interestRate; }private:static double _interestRate;};inline void Account::raiseInterest( double incr ){_interestRate += incr;}Проблема в том, что любая функция-член


15.11. Разрешение перегрузки и функции-члены A

Из книги автора

15.11. Разрешение перегрузки и функции-члены A * Функции-члены также могут быть перегружены, и в этом случае тоже применяется процедура разрешения перегрузки для выбора наилучшей из устоявших. Такое разрешение очень похоже на аналогичную процедуру для обычных функций и


16.3. Функции-члены шаблонов классов

Из книги автора

16.3. Функции-члены шаблонов классов Как и для обычных классов, функция-член шаблона класса может быть определена либо внутри определения шаблона (и тогда называется встроенной), либо вне его. Мы уже встречались со встроенными функциями-членами при рассмотрении шаблона Queue.


Инкапсуляция и функции – не члены

Из книги автора

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


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

Из книги автора

7.2.2 Функции Члены Просто структуры данных вроде employee и manager на смом деле не столь интересны и часто не особенно полезны, потому рассмотрим, как добавить в них функции. Например:class employee (* char* name; // ... public: employee* next; void print(); // ... *);class manager : public employee (* // ... public: void print(); // ... *);Надо


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

Из книги автора

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