Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

П_1_5_Наследование

.pdf
Скачиваний:
15
Добавлен:
03.06.2015
Размер:
179.53 Кб
Скачать

Множественное наследование

Множественное наследование — концепция, при которой класс-потомок может иметь более одного суперкласса (непосредственного класса-родителя).

Множественное наследование реализовано в C++.

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках.

Синтаксис множественного наследования

class clChiled: clParent1, clParent2 [, ...]{}

C++ не поддерживает явно повторяемое наследование,

так как отсутствует способ определить какой именно

суперкласс следует использовать. То есть необходимо

реализовывать методы всех родительских классов, и в

случае, если у них есть одинаковые методы, это может

привести к ошибкам.

Критика множественного наследования

Множественное наследование критикуется за следующие проблемы:

семантическая неопределенность часто совокупно

 

 

представляется как Проблема ромба (C++ по умолчанию

 

не создает ромбовидного наследования).

отсутствует возможность явного многократного наследования от одного класса

порядок наследования изменяет семантику класса

Проблема ромба

Если два класса (B и C) наследуются от A, а класс D наследуется от обоих классов B и C; и если метод класса D вызывает метод, определенный в классе A, а классы B и C по-своему переопределили этот метод, то от какого класса его наследовать: B или C?

Виртуальное наследование

Виртуальное наследование — один из вариантов наследования, который нужен для решения некоторых проблем, порождаемых наличием возможности множественного наследования, путем разрешения неоднозначности того, методы которого из суперклассов необходимо использовать.

Данный тип наследования задается ключевым словом virtual

Пример: летучая мышь

Полиморфизм

Полиморфизм — возможность объектов с одинаковой спецификацией иметь различную реализацию.

Полиморфизм реализуется с помощью наследования классов и виртуальных функций.

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

Далее

Статическое/раннее связывание

Полиморфизм и полиморфные типы

Позднее/динамическое связывание

Виртуальные функции/методы

Таблица виртуальных функций

Абстрактные классы

Чистые виртуальные функции

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]