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



В языке С++ имеется возможность образовывать производный класс от нескольких базовых классов. Общая форма множественного наследования имеет вид:

class имя_произв_класса: имя_базового_кл 1,…,имя_базового_кл N

{ содержимое класса

}

Иерархическая структура, в которой производный класс наследует от несколько базовых классов, называется множественным наследованием. В этом случае производный класс, имея собственные компоненты, имеет доступ к protected- и public-компонентам базовых классов.

Конструкторы базовых классов при создании объекта производного класса вызываются в том порядке, в котором они указаны в списке при объявлении производного класса.

 


Виртуальные функции

Виртуальная функция – это функция, объявленная с ключевым словом virtual в базовом классе и переопределенная в одном или нескольких производных от этого классах. При вызове объекта базового или производных классов динамически (во время выполнения программы) определяется, какую из функций требуется вызвать, основываясь на типе объекта.

Заметим, что деструктор может быть виртуальным, а конструктор нет.

class A {... public: virtual void fun() {} };

class B: public A {... public: void fun() {} };

class C: public B {... public:... };

main() { A a,*p=&a; B b; C c; p->fun();

p=&b; p->fun(); p=&c; p->fun(); }


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

Если класс имеет хотя бы одну чисто виртуальную функцию, то он называется абстрактным. Для абстрактного класса нельзя создать объекты и он используется только как базовый класс для других классов. чисто виртуальные функции - такие ф, тело которых, как правило, не определено.virtual прототип функции = 0; Главное назначение абстрактных классов – в определении интерфейса для некоторой иерархии классов.

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

class base { компоненты-данные public: virtual

~base() = 0; компоненты-функции } base::~base()

{реализация деструктора}

Объект класса base создать невозможно, в то же время деструктор его определен и будет вызван при разрушении объектов производных классов.


Дата добавления: 2015-12-21; просмотров: 19; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!