|
Программирование >> Программирование на языке c++
window w caption and scroll window w caption and scroll Puc. 4.4. Примеры невиртуального (a) и виртуального (б) базового класса window 6 в. А. Скляров В() { cout B\t ; } конструктор ~В{) { cout -B\t ; } деструктор void fb() { cout \nfb ; } class B1 : public В { int b1; public: B1(int bb1) : b1(bb1) { cout B1\t ; } конструктор ~B1{) { cout -B1\t ; } деструктор void fb1() { cout \nfb1 ; } class B2 : public В { int b2; public: B2{int bb2) : b2(bb2) { cout B2\t ; } конструктор ~B2() { cout -B2\t ; } деструктор void fb2() { cout \nfb2 ; } class D : public B2, public Bl { множественное наследование для D int d; public: D(int dd,int bb1,int bb2) : d(dd),B1(bb1),B2(bb2) { cout D\t ; } конструктор . ~D{) { cout -D\t ; } деструктор void fd() { cout \nfd ; } void main{void) { D od(1,2,3),*pd; Последовательность зызова конструкторов: В В2 В Bl D pd=&od; pd->fb1(); Результат: fbl od.fb1{); Результат: fb1 pd->fb2(); Результат: fb2 od.fb20; Результат: fb2 pd->fd(); Результат: fd od.fdO; Результат: fd cout endl; pd->fb(); ошибка - member is ambiguous B::fb and B::fb od.fbO; ошибка - member is ambiguous B::fb and B::fb ) Последовательность вызова деструкторов: -D -Bl -В -В2 -В Второй пример во многом повторяет первый, но объявляет класс В виртуальным (см. рис. 4.4,6, на котором показано, как изменяется при этом диаграмма наследования классов). Здесь следует обратить внимание на то, что при конструировании объекта класса D строится только один подобъект класса В. Кроме того, теперь нет неоднозначности (и, соответственно, ошибок) при вызове функции fbQ. #include <(ostream.h> class В { public: В() { cout B\t ; } ~B() { cout -B\t ; } void fb() { cout \nfb ; } class Bl : virtual public В { базовый класс В является виртуальным int Ы; public: B1(int ЬЫ) : Ы(ЬЫ) { cout B1\t ; } ~В10 { cout -B1\t ; } void fblQ { cout \nfb1 ; } class B2 : virtual public В { базовый класс В является виртуальным int Ь2; public: B2(int ЬЬ2) : Ь2(ЬЬ2) { cout B2\t ; } ~В2() { cout -B2\t ; }
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |