class Derived: Base
{
// ... члены класса Derived
};
5. О тлад ка: Что неправильно в этом коде:
class Derived: public Base
{
// ... члены класса Derived
};
void SomeFunc (Base value)
ЗАНЯТИЕ 11
Полиморфизм
Изучив основы наследования, создания иерархии наследования и понимая, что открытое наследование по существу моделирует от ношения есть, пришло время переходить к употреблению этих знаний в изучении святой чаши Грааля объектно-ориентированного програм мирования — полиморфизма.
На сегодняшнем занятии.
■ Что означает термин полиморфизм.
■ Что делают виртуальные функции и как их использовать.
■ Что такое абстрактные классы и как их объявлять.
■ Что такое виртуальное наследование и где оно необходимо.
278 ЗАНЯТИЕ 11. Полиморфизм
Основы полиморфизма
“Поли” в переводе с греческого языка означает много, а “морф” — форма. Полимор физм (polym orphism ) — это средство объектно-ориентированных языков, позволяющее обрабатывать подобным образом объекты разных типов. Это занятие посвящ ено поли морфному поведению, которое может быть реализовано на языке C++ через иерархию наследования, известную также как полиморфизм подтипа (subtype polymorphism).
Потребность в полиморфном поведении
На занятии 10, “Реализация наследования”, вы видели, как классы Tuna и C arp насле довали открытый метод Swim() от класса F is h (см. листинг 10.1). Классы Tuna и C arp способны предоставить собственные методы T u n a : : Swim () и C a rp : : Swim (), чтобы ту нец и карп плавали по-разному. Но поскольку каждый из них является также рыбой, поль зователь экземпляра класса Tuna вполне может использовать тип базового класса для вы зова метода F i s h : : Swim (), который выполнит только общую часть F i s h : : Swim (), а не полную T u n a : : Swim (), даже при том, что этот экземпляр базового класса F is h является частью класса Tuna. Эта проблема представлена в листинге 11.1.
ПРИМЕЧАНИЕ
Во всех примерах кода на этом занятии было удалено все, что не является аб солютно необходимым для объяснения рассматриваемой темы, а количество строк кода сведено к минимуму, чтобы улучшить удобочитаемость.
При реальном программировании классы необходимо создавать правильно,
также разрабатывать осмысленные иерархии наследования, учитывающие цели проекта и приложения в перспективе.
И СТИ Н Г 11.1. Вызов методов при помощи экземпляра базового
класса Fish, который принадлежит классу Tuna________________
Do'stlaringiz bilan baham: |