Скачать презентацию 13 Множественное наследование 13 1 Множественное наследование Скачать презентацию 13 Множественное наследование 13 1 Множественное наследование

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

  • Количество слайдов: 24

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

13. 1. Множественное наследование Иерархия классов B 1 B 2 D Состояние классов B 13. 1. Множественное наследование Иерархия классов B 1 B 2 D Состояние классов B 1 B 2 D 2

13. 1. Множественное наследование (продолжение) class B 1 {. . . }; class B 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(. . . 13. 2. Конструкторы и деструктор класса Конструктор производного класса: D: : D(. . . ) : B 1(. . . ), B 2(. . . ) {. . . } Порядок вызова конструкторов базовых классов Деструктор производного класса D: : ~D() {. . . } Вызов деструкторов базовых классов 4

13. 3. Методы класса class B 1 {. . . public: void f 1(. 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 {. 13. 3. Методы класса (продолжение) class D: public B 1, public B 2 {. . . public: void g(. . . ); void f(. . . ); . . . }; 6

13. 3. Методы класса (продолжение) void D: : g(. . . ) { f 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; . 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 13. 5. Сложная иерархия классов Иерархия классов B B Состояние класса B D 1 D 2 D D 9

13. 5. Сложная иерархия классов (продолжение) class B { private: int x[10]; public: . 13. 5. Сложная иерархия классов (продолжение) class B { private: int x[10]; public: . . . }; 10

13. 5. Сложная иерархия классов (продолжение) class D 1: public B { private: int 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 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 << 13. 5. Сложная иерархия классов (продолжение) int main() { B a; cout << "sizeof(a) = " << sizeof(a) << endl; sizeof(a) = 40 13

13. 5. Сложная иерархия классов (продолжение) D 1 a 1; cout << 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 << 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 << 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’ 13. 6. Виртуальный базовый класс Иерархия классов Состояние класса B D 1’ D 2’ D 1 D D 2 B D 17

13. 6. Виртуальный базовый класс (продолжение) class B { private: int x[10]; public: . 13. 6. Виртуальный базовый класс (продолжение) class B { private: int x[10]; public: . . . }; 18

13. 6. Виртуальный базовый класс (продолжение) class D 1: virtual public B { private: 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 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 << 13. 6. Виртуальный базовый класс (продолжение) int main() { B a; cout << "sizeof(a) = " << sizeof(a) << endl; sizeof(a) = 40 21

13. 6. Виртуальный базовый класс (продолжение) D 1 a 1; cout << 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 << 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 << 13. 6. Виртуальный базовый класс (продолжение) D 12 a 12; cout << "sizeof(a 12) = " << sizeof(a 12) << endl; sizeof(a 12) = 72 24