Страница:
157 из 357
Функция член одного класса может быть другом другого. Например:
class x (* // ... void f(); *);
class y (* // ... friend void x::f(); *);
Нет ничего необычного в том, что все функции члены однго класса являются друзьями другого. Для этого есть даже блее краткая запись:
class x (* friend class y; // ... *);
Такое описание friend делает все функции члены класса y друзьями x.
5.4.2 Уточнение* Имени Члена
– * Иногда называется также квалификацией. (прим. перев.)
Иногда полезно делать явное различие между именами члнов класса и прочими именами. Для этого используется операция ::, «разрешения области видимости»:
class x (* int m; public: int readm() (* return x::m; *) void setm(int m) (* x::m = m; *) *);
В x::setm() имя параметра m прячет член m, поэтому единственный способ сослаться на член – это использовать его уточненное имя x::m. Операнд в левой части :: должен быть именем класса.
Имя с префиксом :: (просто) должно быть глобальным имнем. Это особенно полезно для того, чтобы можно было исползовать часто употребимые имена вроде read, put и open как имена функций членов, не теряя при этом возможности обращатся к той версии функции, которая не является членом. Например:
class my_file (* // ... public: int open(char*, char*); *);
int my_file::open(char* name, char* spec) (* // ... if (::open(name,flag))(*//использовать open() из UNIX(2) // ... *) // ... *)
5.4.3 Вложенные Классы
Описание класса может быть вложенным. Например:
class set (* struct setmem (* int mem; setmem* next; setmem(int m, setmem* n) (* mem=m; next=n; *) *); setmem* first; public: set() (* first=0; *) insert(int m) (* first = new setmem(m,first);*) // ... *);
Если только вложенный класс не являет
|< Пред. 155 156 157 158 159 След. >|