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

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

Рассмотрим реализацию понятия даты с использованием struct для того, чтобы определить представление даты date и множества функций для работы с переменными этого типа:

struct date (* int month, day, year; *); // дата: месяц, день, год *) date today; void set_date(date*, int, int, int); void next_date(date*); void print_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_burthday; // мой день рождения

void f() (* my_burthday.set(30,12,1950); today.set(18,1,1985);

my_burthday.print();

today.next(); *)

Поскольку разные структуры могут иметь функции члены с одинаковыми именами, при определении функции члена необходимо указывать имя структуры:

void date::next() (* if ( ++day » 28 ) (* // делает сложную часть работы *) *)

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

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

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

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

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