Скачать презентацию 7 Производные классы 7 1 Производный класс Скачать презентацию 7 Производные классы 7 1 Производный класс

7.Производные классы.pptx

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

7. Производные классы 7. Производные классы

7. 1. Производный класс Определяет тип, являющийся разновидностью другого типа Класс1 базовый ЕСТЬ НЕКОТОРЫЙ 7. 1. Производный класс Определяет тип, являющийся разновидностью другого типа Класс1 базовый ЕСТЬ НЕКОТОРЫЙ Класс2 производный 2

7. 2. Наследование Производный класс ЕСТЬ базовый плюс обязательно что-то свое Базовый класс состояние 7. 2. Наследование Производный класс ЕСТЬ базовый плюс обязательно что-то свое Базовый класс состояние Производный класс методы состояние методы 3

7. 4. Производный класс Вопросы: – могут ли (и как) методы производного класса получить 7. 4. Производный класс Вопросы: – могут ли (и как) методы производного класса получить доступ к состоянию и методам базового класса – можно ли (и как) получить доступ к состоянию и методам базового класса через экземпляр производного класса 6

7. 4. Производный класс void D: : g() { x = 0; – ошибка! 7. 4. Производный класс void D: : g() { x = 0; – ошибка! f(); g 1(); – методы базового класса y = 3; – состояние производного класса B: : y = 5; – состояние базового класса fd(); g(); – методы производного класса B: : g(); – метод базового класса } 7

7. 5. Тип наследования Уровень видимости в базовом классе private protected public Тип наследования 7. 5. Тип наследования Уровень видимости в базовом классе private protected public Тип наследования private protected public private protected private protected public 8

7. 5. Тип наследования B ob 1; D ob 2; ob 1. f(); ob 7. 5. Тип наследования B ob 1; D ob 2; ob 1. f(); ob 2. f(); – ошибка! ob 2. fd(); – ошибка! ob 1. g(); ob 1. g 1(); – ok! ob 2. g 1(); – ok только для public наследования! ob 2. g(); – метод производного класса ob 2. B: : g(); – метод базового класса (только для public наследования) 9

7. 6. Пример Point Circle Окружность есть точка, имеющая некоторый размер Класс Окружность: • 7. 6. Пример Point Circle Окружность есть точка, имеющая некоторый размер Класс Окружность: • наследует состояние и методы базового класса Точка • должен определить собственные состояние и/или методы • может переопределить какието методы базового класса 10

7. 7. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 7. 7. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 2); cout << p 2 << endl; (1, 1) cout << c 2 << endl; center: (1, 1), radius: 1 18

7. 7. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 7. 7. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 2); float d; d = p 1. distance(p 2); d = c 1. distance(c 2); d = c 1. distance(p 2); d = p 1. distance(c 2); 1. 41421 19

7. 8. Организация ввода/вывода class Point {. . . protected: ostream &print(ostream &) const; 7. 8. Организация ввода/вывода class Point {. . . protected: ostream &print(ostream &) const; friend ostream & operator <<(ostream &, const Point &); . . . }; 20

7. 8. Организация ввода/вывода ostream &Point: : print(ostream &os) const { return os << 7. 8. Организация ввода/вывода ostream &Point: : print(ostream &os) const { return os << '(' << x << ", " << y << ')'; } ostream & operator <<(ostream &os, const Point &p) { return p. print(os); } 21

7. 8. Организация ввода/вывода class Circle: public Point {. . . protected: ostream &print(ostream 7. 8. Организация ввода/вывода class Circle: public Point {. . . protected: ostream &print(ostream &) const; friend ostream& operator <<(ostream &, const Circle &); . . . }; 22

7. 8. Организация ввода/вывода ostream & Circle: : print(ostream &os) const { os << 7. 8. Организация ввода/вывода ostream & Circle: : print(ostream &os) const { os << "center: "; Point: : print(os); return os << ", radius: " << rad; } 23

7. 8. Организация ввода/вывода ostream & operator <<(ostream &os, const Circle &c) { return 7. 8. Организация ввода/вывода ostream & operator <<(ostream &os, const Circle &c) { return c. print(os); } 24

7. 9. Копирование class B { … public: B(const B&); … }; class D: 7. 9. Копирование class B { … public: B(const B&); … }; class D: public B { … }; void f(const D& d) { B b = d; // копирующий конструктор b = d; // присваивание … } Операторы присваивания не наследуются!!! 25

7. 10. Указатели на классы class B { … public: … void f(); … 7. 10. Указатели на классы class B { … public: … void f(); … }; class D: public B { … public: … void f(); void f 1(); … }; 26

7. 10. Указатели на классы B b. Ob; D d. Ob; b. Ob. f(); 7. 10. Указатели на классы B b. Ob; D d. Ob; b. Ob. f(); d. Ob. f 1(); d. Ob. f(); B *b. Ptr = &b. Ob; D *d. Ptr = &d. Ob; b. Ptr->f(); (*b. Ptr). f(); d. Ptr->f 1(); d. Ptr->f(); b. Ob d. Ob b. Ptr d. Ptr 27

7. 10. Указатели на классы b. Ptr = &d. Ob; d. Ptr = &b. 7. 10. Указатели на классы b. Ptr = &d. Ob; d. Ptr = &b. Ob; – ошибка!!! b. Ob d. Ob ? ? ? b. Ptr d. Ptr 28

7. 10. Указатели на классы b. Ptr = &d. Ob; b. Ob d. Ob 7. 10. Указатели на классы b. Ptr = &d. Ob; b. Ob d. Ob b. Ptr->f(); – какой метод ? ? ? b. Ptr->f 1(); – что будет ? ? ? b. Ptr 29