Бьерн Страуструп.
Язык программирования С++
152
функции manager::print() будет зафиксирована ошибка: члену производного класса не предоставлено
право доступа к частным членам его базового класса, значит name недоступно в этой функции.
Возможно многим это покажется странным, но давайте рассмотрим альтернативное решение: функция-
член производного класса имеет доступ к частным членам своего базового класса. Тогда само понятие
частного (закрытого) члена теряет всякий смысл, поскольку для доступа к нему достаточно просто
определить производный класс. Теперь уже будет недостаточно для выяснения, кто использует
частные члены класса, просмотреть все функции-члены и друзей этого класса. Придется просмотреть
все исходные файлы программы, найти производные классы, затем исследовать каждую функцию этих
классов. Далее надо снова искать производные классы от уже найденных и т.д. Это, по крайней мере,
утомительно, а скорее всего нереально. Нужно всюду, где это возможно, использовать вместо частных
членов защищенные (см. $$6.6.1).
Как правило, самое надежное решение для производного класса - использовать только общие члены
своего базового класса:
void manager::print() const
{
employee::print(); // печать данных о служащих
// печать данных об управляющих
}
Отметим, что операция :: необходима, поскольку функция print() переопределена в классе manager.
Такое повторное использование имен типично для С++. Неосторожный программист написал бы:
void manager::print() const
{
print();
// печать данных о служащих
// печать данных об управляющих
}
В результате он получил бы рекурсивную последовательность вызовов manager::print().
Достарыңызбен бөлісу: