#include
using namespace std;
c la ss Mammal
{
pub lic:
void FeedBabyMilk()
272 ЗАНЯТИЕ 10. Реализация наследования
{
cout « "Mammal: Baby says glug!" « endl;
}
10: };
1 1 :
class Reptile
{
public:
void SpitVenomO
{
cout « "Reptile: Shoo enemy! Spits venom!" « endl;
}
};
2 0 :
class Bird
22: {
public:
void LayEggsO
{
cout « "Bird: Laid my eggs, am lighter now!" « endl;
}
};
29:
class Platypus: public Mammal, public Bird, public Reptile
{
public:
void Swim()
{
cout « "Platypus: Voila, I can swim!" « endl;
}
};
38:
int main()
{
Platypus_realFreak;_____realFreak.LayEggs();'>Platypus realFreak;
realFreak.LayEggs();
realFreak.FeedBabyMilk();
realFreak.SpitVenom();
realFreak.Swim();
46:
return 0;
}
Результат
Bird: Laid my eggs, am lighter now!
Mammal: Baby says glug!
Резюме_273___Анализ'>Reptile: Shoo enemy! Spits venom!
Platypus: Voila, I can swim!
Резюме 273
Анализ
Определение средств класса P la t y p u s действительно компактно (строки 30 -37). По
.-уществу, он просто наследует их от трех классов: Mam m al, R e p t i l e и B ir d . Функция
a in () в строках 41-44 способна обратиться к трем индивидуальным характеристикам разовых классов, используя объект r e a lF r e a k производного класса P la t y p u s . Кроме зызова функций, унаследованных от классов Mammal, B i r d и R e p t il e , функция m a in () з строке 45 вызывает метод P la t y p u s :: Swim ( ) . Эта программа демонстрирует синтаксис чножественного наследования, а также то, как производный класс предоставляет все от крытые члены (в данном случае методы) многих своих базовых классов.
Утконос может плавать, но это не рыба. Следовательно, в листинге 10.10 мы не наследовали класс Platypus также от класса Fish только для удобства использования существующего метода Fish: :Swim(). Принимая решения в проекте, не забывайте, что открытое наследование должно также отражать от ношения и не должно использоваться без разбора, лишь для решения опреде ленных задач, связанных с многократным использованием. Этого можно до стичь и по-другому.
РЕКОМЕНДУЕТСЯ
Создавайте открытую иерархию наследования для установки отношений есть
Создавайте закрытую или защищенную иерар хию наследования для установки отношений
содержит
Помните, открытое наследование означает, что у классов, производных от производного класса, есть доступ к открытым и защищенным членам базового класса
Помните, закрытое наследование означает, чтодаже классы, производные от производного класса, не имеют доступа к базовому классу
Помните, защищенное наследование означа ет, что у классов, производных от производного класса, есть доступ к защищенным и открытым методам базового класса
Помните, что, независимо от характера наслед ственных отношений, закрытые члены в базо вом классе недоступны никаким производным классам
Резюме
НЕ РЕКОМЕНДУЕТСЯ
Не создавайте иерархию наследования толь ко для многократного использования обычных функций
Не используйте закрытое и открытое наследо вание без разбора, поскольку впоследствии это может стать узким местом архитектуры ва шего приложения
Не создавайте функции производного класса (с тем же именем, но другим набором входных параметров), которые непреднамеренно скры вают таковые в базовом классе
На сегодняшнем занятии рассматривались основы наследования в языке C++. Вы узна ли, что открытое наследование — это отношения ест ь между производным и базовым
274 ЗАНЯТИЕ 10. Реализация наследования
классами, а закрытое и защищенное наследование создает отношения имеет. Вы видели, что применение модификатора доступа p r o t e c t e d предоставляет члены базового класса только к производному, оставляя их скрытыми от классов вне иерархии наследования. Вы узнали, что защищенное наследование отличается от закрытого тем, что производные классы производного класса могут обращаться к открытым и защищенным членам базо вого класса, что невозможно при закрытом наследовании. Вы изучили основы переопреде ления методов и их сокрытия, а также узнали, как избежать нежелательного сокрытия метода с использованием ключевого слова u s in g .
Теперь вы готовы ответить на несколько вопросов, а затем перейти к изучению сле дующего столпа объектно-ориентированного программирования — полиморфизму.
Do'stlaringiz bilan baham: |