C++   ::   Хилл Мюррей

Страница: 227 из 357

Возможность, позволяющая программисту получать доступ к закрытой части класса просто с помощью вывода из него другого класса, лишила бы понятие зарытого члена всякого смысла. Более того, нельзя было бы унать все использования закрытого имени, посмотрев на функции, описанные как члены и друзья этого класса. Пришлось бы проврять каждый исходный файл во всей программе на наличие в нем производных классов, потом исследовать каждую функцию этих классов, потом искать все классы, производные от этих класов, и т.д. Это по меньшей мере утомительно и скорее всего нереально.

С другой стороны, можно ведь использовать механизм friend, чтобы предоставить такой доступ или отдельным функцям, или всем функциям отдельного класса (как описывается в #5.3). Например:

class employee (* friend void manager::print(); // ... *);

решило бы проблему с manager::print(), и

class employee (* friend class manager; // ... *);

сделало бы доступным каждый член employee для всех фунций класса manager. В частности, это сделает name доступным для manager::print().

Другое, иногда более прозрачное решение для производного класса – использовать только открытые члены его базового класса. Например:

void manager::print() (* employee::print(); // печатает информацию о служащем // ... // печатает информацию о менеджере *)

Заметьте, что надо использовать ::, потому что print() была переопределена в manager. Такое повторное использование имен типично. Неосторожный мог бы написать так:

void manager::print() (* print(); // печатает информацию о служащем // ...

|< Пред. 225 226 227 228 229 След. >|

Java книги

Контакты: [email protected]