- •Просте та множинне наслідування.
- •Робота конструктора й деструктора
- •Void main ( )
- •Базовий клас координат
- •Похідний клас точки
- •Використання конструктора з параметрами
- •Перевизначення й виклик членів базового класу
- •Множинне наслідування.
- •Робота конструктора й деструктора
- •Void main ( )
- •Віртуальні базові класи
- •Int Getx ( ) { return X ; }
- •Void main ( )
- •Int Getx ( ) { return X ; }
- •Void main ( )
Просте та множинне наслідування.
Мова C++ дозволяє класу наслідувати дані-члени й функції-члени одного або декількох інших класів. При цьому новий клас називають похідним класом (або класом-нащадком). Клас, елементи якого наслідуються, називається базовим класом (батьківським класом або класом предком) для свого похідного класу. Якщо в похідного класу зазначено один базовий клас, то це просте наслідування. Якщо в похідного класу є кілька базових класів, то говорять про множинне наслідування.
Наслідування дає можливість деякі загальні риси поведінки класів абстрагувати в одному базовому класі.
Похідні класи:
успадковують дані-члени й функції-члени базового класу
можуть додавати нові дані-члени й функції-члени;
можуть видозмінювати деякі функції-члени базового класу.
Похідний клас не успадковує наступні члени базового класу:
конструктори;
деструктори;
перевантажені оператори присвоєння;
друзі класу.
Але найважливіший смысл наследования заключается не в том, что оно обеспечивает доступ к функциям базового класса. Наследование выражает связь между новым и базовым классами, и эта связь выражается так: «Новый класс является подтипом существующего класса». Например, базовый класс инструмент, представляющий музыкальный инструмент, и производный класс духовой инструмент.
Синтаксис оголошення похідного класу має такий вигляд:
class Basel // Базовий клас
{ <елементи_класу> } ;
class Base2 // Базовий клас
{ <елементи_класу> } ;
class Derived : <специфікатор_доступу> Basel, // Похідний клас
<специфікатор_доступу> Base2,
• • •
<специфікатор_доступу> Basen
{ <елементи_класу> } ;
Тут <специфікатор_доступу> –не є обов'язковим і за замовчуванням приймає значення private для класів і public для структур. Специфікатор доступу при наслідуванні визначає рівень доступу до елементів базового класу, який одержують елементи похідного класу. У наведеній нижче таблиці описані можливі варіанти наслідуваного доступу.
Доступ у базовому класі
|
public |
protected |
private |
public |
public |
protected |
недоступні |
protected |
protected |
protected |
недоступні |
private |
private |
private |
недоступні |
Таблиця показує, що специфікатор наслідуваного доступу встановлює той рівень доступу, до якого знижується рівень доступу до членів, установлений у базовому класі.
Робота конструктора й деструктора
class Coord
{
public :
// базовий клас
Coord ( ) { cout <<"Constructor Coord \n"; }
~coord ( ) { cout <<"Destructor Coord \n"; }
}
class Dot : public Coord
{
public :
Dot ( ) { cout <<"Constructor Dot \n";}
~dot ( ){ cout <<"Destructor Dot \n";}
}
Void main ( )
{
Dot A ;
}
Результат роботи:
Constructor Coord
Constructor Dot
Destructor Dot
Destructor Coord
Хоча конструктор базового класу не успадковується, він автоматично викликається при створенні екземпляра похідного класу. Причому спочатку виконується конструктор базового класу, а потім - похідного. Єдина можливість передати аргументи конструкторам базового класу – використати список ініціалізації елементів
Деструктор похідного класу виконується раніше деструктора базового класу. Уся робота з організації відповідного виклику покладає на компілятор і програміст не повинен опікуватися про це.