- •Що таке композиція?
- •class CPoint
- •// Колесо
- •// Слайд class CSlide
- •Що таке
- •Термінологія
- •Тварина
- •Варіанти
- •Публічне (відкрите) спадкоємство
- •class CPerson
- •Публічне спадкоємство як
- •CShape
- •CPoint
- •Приватне (закрите) спадкоємство
- •class CIntArray
- •Композиція - переважна
- •class CIntArray
- •Захищене
- •class CIntArray
- •Відмінності між захищеним і відкритим
- •Типи спадкоємства в інших мовах
- •Порядок виклику конструкторів
- •Конструктор класу CEmployee (службовець) оголошений захищеним, аби не допустити безглузде створення абстрактних «службовців»
- •Порядок виклику деструкторів
- •class CTable
- •Перевантаження
- •class CBase
- •Завдання - ієрархія геометричних фігур
- •class CShape
- •int main(int argc, char * argv[])
- •void PrintShapeArea(CShape const& shape)
- •У чому ж проблема?
- •Віртуальні методи
- •class CShape
- •void PrintShapeArea(CShape const& shape)
- •Особливості реалізації віртуальних функцій в
- •Віртуальний
- •class CBase
- •class CBase
- •Підводимо підсумки
- •Абстрактні класи
- •class CShape
- •Інтерфейс
- •class IShape
- •Приведення типів
- •Оператор
- •class CAnimal
- •CMammal const& MakeMammal(CAnimal const & animal)
- •Не зловживайте
- •class CAnimal
- •Множинне
- •IDrawable
- •// інтерфейс об'єктів, які можна намалювати
- •Проблеми, що виникають при множинному спадкоємстві
- •CAnimal
- •//Животное class CAnimal
- •Можливе вирішення даної проблеми - віртуальне спадкоємство
- •//Тварина class CAnimal
- •Обмеження віртуального спадкоємства
- •Коли множинне спадкоємство може бути корисним
- •Переваги використання спадкоємства
- •Спадкоємство і питання проектування
Що таке композиція?
Композиція (агрегація, включення) - простий механізм для створення нового класу шляхом об'єднання декількох об'єктів існуючих класів в єдине ціле
При агрегації між класами діє «відношення
приналежності»
В машини є кузов, колеса і двигун
У людини є голова, руки, ноги і тіло
В трикутника є вершини
Вкладені об'єкти зазвичай оголошуються закритими (private) усередині класу-агрегату
class CPoint |
Крапк |
{ |
|
public: |
а |
CPoint(double x, double y); |
|
double GetX()const; |
|
double GetY()const; |
Трикутник |
private: |
|
double m_x, m_y; |
|
}; |
|
class CTriangle
{
public:
CTriangle(CPoint const& p1, CPoint const& p2, CPoint const& p3);
CPoint GetVertex(unsigned index)const; private:
CPoint m_p1, m_p2, m_p3; };
// Колесо |
// Двигун |
class CWheel |
class CEngine |
{ |
{ |
... |
... |
}; |
}; |
// Кузов |
// Автомобіль |
class CBody |
class CAutomobile |
{ |
{ |
... |
public: |
}; |
... |
|
private: |
|
CBody m_body; |
|
CEngine m_engine; |
|
CWheel m_wheels[4]; |
|
}; |
// Слайд class CSlide
{
...
};
// Презентація class CPresentation
{
public:
CSlides & GetSlides(); CSlides const&
GetSlides()const;
private:
CSlides m_slides; };
// Слайди class CSlides
{
public:
CSlide & operator[](unsigned index);
CSlide const & operator[] (unsigned index)const;
...
private:
std::vector<CSlide> m_items; };
Що таке
спадкоємство?
Найважливіший механізм ООП, що дозволяє описати новий клас що вже існує
При спадкоємстві властивості і функціональність батьківського класу
успадковуються новим класом
Клас-спадкоємець має доступ до прилюдних і захищених методів і полів класу батьківського класу
Клас-спадкоємець може додавати свої дані і методи, а також перевизначати методи базового класу
Термінологія
Батьківський або базовий клас (клас-батько) - клас, промовець як основа при спадкоємстві
Клас-нащадок (дочірній клас, клас- спадкоємець) - клас, утворений в результаті спадкоємства від батьківського класу
Ієрархія спадкоємства - стосунки між батьківським класом і його нащадками
Інтерфейс класу - сукупність прилюдних методів класу, доступна для використання поза класом
У інтерфейсній частині дані зазвичай не розміщують
Реалізація класу - сукупність приватних методів і даних класу
Тварина |
Батьківський |
|
клас |
||
|
Риба |
Птиця |
Класи-нащадки |
Орел |
Голуб |
Класи-нащадки |
Варіанти
спадкоємства
За типом спадкоємства
Прилюдне (відкрите) спадкоємствоПриватне (закрите) спадкоємствоЗахищене спадкоємство
По кількості базових класів
Одиночне спадкоємство (один базовий клас)
Множинне спадкоємство (два і більш базових класів)