13.Множественное наследование.pptx
- Количество слайдов: 24
13. Множественное наследование
13. 1. Множественное наследование Иерархия классов B 1 B 2 D Состояние классов B 1 B 2 D 2
13. 1. Множественное наследование (продолжение) class B 1 {. . . }; class B 2 {. . . }; class D: public B 1, public B 2 {. . . }; Важно: class D: public B 1, B 2 {. . . }; эквивалентно class D: public B 1, private B 2 {. . . }; 3
13. 2. Конструкторы и деструктор класса Конструктор производного класса: D: : D(. . . ) : B 1(. . . ), B 2(. . . ) {. . . } Порядок вызова конструкторов базовых классов Деструктор производного класса D: : ~D() {. . . } Вызов деструкторов базовых классов 4
13. 3. Методы класса class B 1 {. . . public: void f 1(. . . ); void f(. . . ); . . . }; class B 2 {. . . public: void f 2(. . . ); void f(. . . ); . . . }; 5
13. 3. Методы класса (продолжение) class D: public B 1, public B 2 {. . . public: void g(. . . ); void f(. . . ); . . . }; 6
13. 3. Методы класса (продолжение) void D: : g(. . . ) { f 1(. . . ); f 2(. . . ); } void D: : f(. . . ) { B 1: : f(. . . ); B 2: : f(. . . ); } D ob; ob. g(. . . ); ob. f 1(. . . ); ob. f 2(. . . ); ob. B 1: : f(. . . ); ob. B 2: : f(. . . ); 7
13. 4. Указатели на классы B 1 *p 1; B 2 *p 2; . . . p 1 = new D(. . . ); p 2 = new D(. . . ); p 1 ->f 1(. . . ); p 2 ->f 2(. . . ); p 1 ->f(. . . ); p 2 ->f(. . . ); 8
13. 5. Сложная иерархия классов Иерархия классов B B Состояние класса B D 1 D 2 D D 9
13. 5. Сложная иерархия классов (продолжение) class B { private: int x[10]; public: . . . }; 10
13. 5. Сложная иерархия классов (продолжение) class D 1: public B { private: int y, w[3]; public: . . . }; class D 2: public B { private: int y; public: . . . }; 11
13. 5. Сложная иерархия классов (продолжение) class D 12: public D 1, public D 2 { private: int z; public: D 12(…): D 1(…), D 2(…) { … }. . . }; 12
13. 5. Сложная иерархия классов (продолжение) int main() { B a; cout << "sizeof(a) = " << sizeof(a) << endl; sizeof(a) = 40 13
13. 5. Сложная иерархия классов (продолжение) D 1 a 1; cout << "sizeof(a 1) = " << sizeof(a 1) << endl; sizeof(a 1) = 56 14
13. 5. Сложная иерархия классов (продолжение) D 2 a 2; cout << "sizeof(a 2) = " << sizeof(a 2) << endl; sizeof(a 2) = 44 15
13. 5. Сложная иерархия классов (продолжение) D 12 a 12; cout << "sizeof(a 12) = " << sizeof(a 12) << endl; sizeof(a 12) = 104 16
13. 6. Виртуальный базовый класс Иерархия классов Состояние класса B D 1’ D 2’ D 1 D D 2 B D 17
13. 6. Виртуальный базовый класс (продолжение) class B { private: int x[10]; public: . . . }; 18
13. 6. Виртуальный базовый класс (продолжение) class D 1: virtual public B { private: int y, w[3]; public: . . . }; class D 2: virtual public B { private: int y; public: . . . }; 19
13. 6. Виртуальный базовый класс (продолжение) class D 12: public D 1, public D 2 { private: int z; public: D 12(…): D 1(…), D 2(…) , B(…) { … }. . . }; 20
13. 6. Виртуальный базовый класс (продолжение) int main() { B a; cout << "sizeof(a) = " << sizeof(a) << endl; sizeof(a) = 40 21
13. 6. Виртуальный базовый класс (продолжение) D 1 a 1; cout << "sizeof(a 1) = " << sizeof(a 1) << endl; sizeof(a 1) = 60 22
13. 6. Виртуальный базовый класс (продолжение) D 2 a 2; cout << "sizeof(a 2) = " << sizeof(a 2) << endl; sizeof(a 2) = 48 23
13. 6. Виртуальный базовый класс (продолжение) D 12 a 12; cout << "sizeof(a 12) = " << sizeof(a 12) << endl; sizeof(a 12) = 72 24


