а 9 • Множественное наследован

Автор admin Среда, 17 июня 2009 11:32

а 9 • Множественное наследование ния b.f() будет вызвана функция Left.f(): производный класс рассматривается как находящийся во вложенной области видимости базового класса. В общем случае имя A::f доминирует над именем B::f, если А наследует от В, напрямую или косвенно, или другими словами, если А является «более производным» в иерархии, чем В1. Выбирая между двумя одноименными функциями, компилятор выбирает доминирующее имя. Если такового не окажется, возникает неоднозначность. Следующая программа демонстрирует принцип доминирования: //: C09:Dominance2.cpp #include using namespace std; class A { public: virtual -AO {} virtual void f() {cout « “A::f\n”:} }: class В : virtual public A { public: void f() {cout « “B::f\n”;} }: class С : public В {}; class D : public C. virtual public A {}; int mainO { В* p = new D: p->f(): // calls B::f() delete p; } ///:- Иерархия классов этого примера выглядит так: A{f} D Обратите внимание: виртуальное наследование играет важную роль в этом примере. Если бы класс Тор не был виртуальным базовым классом, то в производный класс содержал бы несколько подобъектов


Комментарии закрыты.