- •1 Парадигми та мови програмування
- •1.1 Процедурне програмування
- •1.2 Об'єктне (модульне) програмування
- •1.3 Об'єктно-орієнтовне програмування
- •2 Програмне середовище
- •3 Базові поняття програмування
- •4 Процедурно-орієнтоване програмування
- •4.1 Функції
- •4.2 Вбудовані (inline) функції
- •4.3 Передача параметрів
- •4.4 Обчислення значення функцій
- •4.4. Обчислення значення функції — вихід із функції; особливості повернення та використання іменованого значення, іменованої константи
- •4.5 Рекурсія
- •4.6 Довизначення (overloading) функцій
- •4.6. Довизначення (overloading) функцій
- •4.7 Узагальнені функції (function template)
- •4.8 Непряме використання функцій: указники на функції, їх тип, ініціалізація і присвоєння
- •4.9 Видимість
- •4.10 Тривалість життя об’єктів
- •5 Об'єктне програмування
- •5.1 Класи і об'єкти, члени класів
- •5.2 Інтерфейс класу, реалізація класу; визначення і оголошення класу
- •5.3 Створення і ініціалізація об'єктів, довизначення конструкторів, замовчуваний конструктор, копіювання, поверхневе і глибоке копіювання, ініціалізація і присвоєння, копіювальний конструктор
- •5.4 Cтатичні члени класів і статичні класні функції
- •5.5 Константні об'єкти, константні функції, змінювані члени константних об'єктів (mutable)
- •5.6 Поточний об'єкт this, указники на члени класу і класні функції, порівняння з указниками на (позакласні) функції, указники на статичні члени класу
- •5.7 5.8. Довизначення (overloading) операцій
- •5.7 5.8. Довизначення (overloading) операцій
- •5.7 5.8. Довизначення (overloading) операцій
- •5.7 5.8. Довизначення (overloading) операцій
- •5.7 5.8. Довизначення (overloading) операцій
- •5.7 5.8. Довизначення (overloading) операцій
- •5.8 Клас string: конструктори і присвоєння рядків, операції, відкладене копіювання
- •5.9 Параметризовані класи (class template): визначення шаблону, конкретизація
- •6 Об'єктно-орієнтовне програмування
- •6.1 Ієрархія об’єктів і ієрархія класів
- •6.2 Відкрите, закрите і захищене успадкування, успадкування типу і успадкування реалізації; абстрактні класи
- •6.3 Створення похідних об'єктів
- •6.4 Статичне і динамічне зв’язування
- •6.5 Успадкування із спільного базового класу. Кратне (multiple) успадкування. Віртуальне успадкування, порядок виклику конструкторів
- •7 Екзаменаційні завдання
- •7 Екзаменаційні завдання
6.5 Успадкування із спільного базового класу. Кратне (multiple) успадкування. Віртуальне успадкування, порядок виклику конструкторів
Успадкування із спільного базового класу. Кратне (multiple) успадкування. Віртуальне успадкування, порядок виклику конструкторів
Ось як відбувається успадкування при спільному базовому класі
|
|
class Paralellogram
{
protected:
short _height;
short _width;
short _angle;
public:
Paralellogram( short h, short w, short a);
};
Paralellogram::Paralellogram( short h, short w, short a)
{
_height = h;
_width = w;
_angle = a;
cout<<"A parallelogram was created"<<'\n';
}
class Rectangle : public Paralellogram
{
public:
Rectangle( short h, short w );
};
Rectangle::Rectangle(short h, short w):
Paralellogram (h, w, 90)
{
cout<<"A rectangle was created"<<'\n';
}
class Rhombus : public Paralellogram
{
public:
Rhombus(short side, short a);
};
Rhombus::Rhombus( short side, short a ):
Paralellogram (side, side, a)
{
cout<<"A rhombus was created"<<'\n';
}
class Square : public Rectangle, public Rhombus
{
public:
Square( short side );
};
Square::Square( short side ) :
Rectangle( side, side ),
Rhombus (side, 90)
{
cout<<"A square was created"<<'\n';
}
int main()
{
Square mySquare(10);
return 0;
}
Створено паралелограм
Створено прямокутник
Створено паралелограм
Створено ромб
Створено квадрат
Від проблеми дублювання атрибутів ця проблема відрізняється тим, що кожен з конструкторів, викликаючи конструктор супероб’єкту, створює власну копію базового об’єкту. Вихід полягає у заміщенні правила виконання конструктора. По суті це можна було б назвати віртуальними конструкторами, але прийнято називати віртуальним успадкуванням. Мету наших побудов показує малюнок
|
|
class Rectangle : public virtual Paralellogram
{
public:
Rectangle( short h, short w );
};
class Rhombus : public virtual Paralellogram
{
public:
Rhombus( short side, short a );
};
class Square : public Rectangle, public Rhombus
{
public:
Square( short side );
};
Square::Square( short side ):
Rectangle( side, side ),
Rhombus (side, 90),
Paralellogram( side, side, 90)
{
cout<<"A square was created"<<'\n';
}
int main()
{
Square mySquare(10);
return 0;
}
Створено паралелограм
Створено прямокутник
Створено ромб
Створено квадрат
Відповідальність за створення спільного супероб’єкту переймає нижчий підоб’єкт.
7 Екзаменаційні завдання
авіфав
7 Екзаменаційні завдання
івафіва
8 Перевірте свої знання по С++
Начало формы
Конец формы
Начало формы
|
Начало формы
Конец формы |
Перевірити
Конец формы
Powered by ILIAS 2.4.6
