Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 2_oop.ppt
Скачиваний:
56
Добавлен:
03.03.2016
Размер:
495.1 Кб
Скачать

int main() {

C* pc = new C; pc->f(); pc->g(); pc->h(); ((A*)pc)->f(); ((W*)pc)->f(); delete pc;

B* pb = new B; pb->f(); pb->g(); pb->h();

((W*) pb)->f(); delete pb;

A* pa = new A; pa->f(); pa->g(); pa->h();

((W*) pa)->g(); delete pa; return 0;

}

Для описания иерархий множественного наследования используется прямой ациклический граф.

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

Для рассмотренного примера порядок вызова конструкторов следующий:

W::W();

A::A();

B::B();

C::C();

Пример. Использование одного класса в качестве виртуального и невиртуального базового класса

class A {...};

 

class B: public virtual A {...

};

class C: public virtual A {...

};

class D: public A {...};

 

class E: public B, public C, public D {};

 

 

 

A

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

C

D

E

Порядок вызова конструкторов:

A::A();

B::B();

C::C();

A::A();

D::D();

E::E();

Соседние файлы в папке lectures