Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Применение наследования

Dynamic_cast <тип *> (выражение). | Информация о типе во время выполнения (RTTI) (лучше почитать после обсуждения виртуальных функций). | Конструкторы, деструктор и перегрузка опрации присваивания в производном классе. | Виртуальные функции | Плата за полиморфизм | Абстрактные базовые классы и чисто виртуальные функции | Множественное наследование |


Читайте также:
  1. DSP эффекты, применение хоруса, реверберации и дилэя.
  2. III. Применение кванторов
  3. БОЕВОЕ ПРИМЕНЕНИЕ, СОСТАВ И НАЗНАЧЕНИЕ МАШИНЫ 1В19-1
  4. БОЕВОЕ ПРИМЕНЕНИЕ, СОСТАВ, НАЗНАЧЕНИЕ И РАЗМЕЩЕНИЕ ОСНОВНОГО ОБОРУДОВАНИЯ МАШИНЫ 1В110-1
  5. БОЕВОЕ ПРИМЕНЕНИЕ, СОСТАВ, НАЗНАЧЕНИЕ И РАЗМЕЩЕНИЕ ОСНОВНОГО ОБОРУДОВАНИЯ МАШИНЫ 1В18-1
  6. В дальнейшем изложении мы будем предполагать применение операции переименования во всех конфликтных случаях.
  7. В период перехода от первобытного стада к родовому строю происходит освоение огня и применение наряду с ручным рубилом остроконечника и скребка.

 

Наследование используется, главным образом, в следующих случаях:

 

(1) Сущности в прикладной области (==моделируемой проблемной области) представленной в виде классов могут иметь естественное отношение наследования, т.е., один класс объектов еcть специальный случай другого класса, так аспирант является студентом, студент есть некоторая личность, и т.п., но не всякий студент - аспирант. Наследование классов реализует отношение “быть чем-то” или “Это Есть” (this IS-A). Когда класс рассматривается как тип данных, то производный класс становится подтипом базового класса. На основе наследования может быть сконструирована иерархия классов (иерархия подтипов), отображающая внутренние связи (отношения) между этими классами, отвечающие отношениям между объектами прикладной области. В этом случае, обычно, используется открытое наследование. При таком наследовании объекты производного класса можно рассматривать как экземпляры базового. Иногда об открытом наследовании говорят как об интерфейсном наследовании.

//*********

Заметим, что в этом случае отношение “this IS-A”, на самом деле, не эквивалентно “бытовому” использованию “это есть” ("is a"): в частности, мы можем указать на предмет и сказать, например, “это есть ложка”, объясняя, фактически, назначение предмета (“это есть…, чтобы есть” - шютка), что к наследованию не имеет никакого отношения. С классами дело обстоит иначе. Если класс A является производным классом от класса B, тогда предполагается, что объект класса A может обладать поведением объектов класса B, а именно: объектами класса A можно манипулировать с помощью методов класса B. Но, например, Вы, будучи математиком, можете сказать, что Окружность это есть (вырожденный) Эллипс и будете как программист не правы в контексте открытого наследования в C++. Не корректно говорить об Окружности как о производном классе класса Эллипс, поскольку эллипс может быть сжат по одной из осей (в предположении, что этому соответствует метод класса Эллипс), в то время как для Окружности это поведение смысла не имеет (окружность теряет свою самоидентичность). Поэтому, говорить об Окружности как подтипе типа Эллипс некорректно.

//*********

(2) Второй случай – достижение с помощью наследования повторного использования кода. Классу A может оказаться полезным использование методов из другого класса B. Тогда нужно определить A как производный от B класс так, чтобы методы из B были доступны в A. При определении B у нас нет необходимости повторять многие строки кода, уже написанного при определении A. Например, стек может быть реализован как связный список. Если связные списки выполнены как класс Linked_list, тогда класс Stack для нашего стека мог бы быть объявлен как производный класс от Linked_list. Затем функции, определенные в классе Linked_list могут вызываться напрямую (конечно, при условии, что с правами доступа все в порядке…), или используя операцию ::, для реализации Stack. В таких случаях часто применяют закрытое наследование.

 

Наследование облегчает, также, модификацию программ. Когда модифицируется базовый класс, то изменения в нем, автоматически, переносятся на всех его потомков, так что нам нет нужды изменять почти весь код программы.

 

 


Дата добавления: 2015-11-16; просмотров: 54 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Наследование классов| Использование объектов производного класса в качестве объектов базового класса

mybiblioteka.su - 2015-2024 год. (0.007 сек.)