Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №5 Просте та множинне наслідування .doc
Скачиваний:
5
Добавлен:
16.11.2019
Размер:
95.23 Кб
Скачать

Базовий клас координат

class Coord

{

protected:

double x, y ; // координати

public :

Coord ( ) { x = 0 ; y = 0 ; }

Coord ( double X, double Y ) { x = X ; y = Y ; }

void Print ( ) ;

void Input ( ) ;

} ;

void Coord :: Print ( )

{

cout<<"\tx="<<x<<"\ty="<<y<<’\n'

}

void Coord :: Input (

{

cout <<"\tx="; cin>>x ;

cout <<"\ty="; cin>>y ;

}

Похідний клас точки

Якщо в похідного класу є всього один базовий клас, то говорять про просте наслідування.

Наступний приклад ілюструє просте наслідування.

#include ”Coord.h”

class Dot : public Coord

{

char name ;

public :

Dot ( char Name ) : Coord ( ){ name = Name ; }

Dot ( char Name, double X, double Y ) : Coord ( X, Y ){ name = Name ; }

void Input ( ) ;

void Print ( ) ;

} ;

void Dot :: Print ( )

{

cout<<”coordinaty point”<<name<<” :”;

Coord :: Print ( ) ;

}

void Dot :: Input ( )

{

cout<<”vvod coordinat point”<<name<<”:”;

Coord :: Input ( ) ;

}

void main()

{

Dot C ('C', 3, 4 ), D ('D') ;

C.Print ( ) ; D.Print ( ) ;

cout<<"CD="<<C.Dist (D)<<'\n';}

Використання конструктора з параметрами

Оскільки похідний клас повинен успадкувати всі члени батьківського, при побудові об'єкта свого класу він повинен забезпечити ініціалізацію успадкованих даних-членів.

Дані-члени похідного класу можуть використовувати значення даних-членів батьківського класу. Тому ініціалізацію успадкованих даних-членів класу повинна бути виконана до ініціалізації даних-членів похідного класу. Конструктор похідного класу будується з використанням наступного синтаксису:

<констр_похідного_класу> ( <список_параметрів> ) :

<констр_базового_класу> ( <список_аргументів> )

{ <тіло_конструктора> }

Тут використовується список ініціалізації елементів, у якім вказується конструктор базового класу. Частина параметрів, переданих конструкторові похідного класу, звичайно використовується в якості аргументів конструктора базового класу. Потім у тілі конструктора похідного класу виконується ініціалізація даних-членів, що належать цьому класу.

Перший конструктор класу Dot має вигляд:

Dot ( char Name ) : Coord ( ) { name = Name ; }

При виклику цього конструктора спочатку викликається конструктор базового класу Coord ( ), який ініціалізує успадковані дані-члени x і y нулями. Потім у тілі конструктора дане-член name ініціалізується значенням параметра конструктора Name.

Другий конструктор класу Dot має вигляд:

Dot ( char Name, double X, double Y ) : Coord ( X, Y ) { name = Name ; }

При виклику другого конструктора спочатку викликається конструктор базового класу Coord ( double X,double Y ), який ініціалізує успадковані дані-члени x і y значеннями параметрів конструктора X і Y. Потім у тілі конструктора дане-член name ініціалізується значенням параметра конструктора Name.

Перевизначення й виклик членів базового класу

У похідному класі звичайно додаються нові члени до членів базового класу. Однак існує також можливість перевизначення (або заміщення) членів базового класу. Звичайно використовується перевизначення функцій-членів базового класу. Щоб перевизначити функцію-член базового класу в похідному класі, досить включити її прототип в оголошення цього класу й потім дати її визначення. Прототипи перевизначеної функції в базовому й похідному класах повинні збігатися.

Іноді виникає необхідність викликати функцію-член базового класу, а не її перевизначений варіант, це можна зробити за допомогою операції дозволу області видимості, застосовуваної у формі:

<ім'я_класу> :: <ім'я_члена>

Це дає можливість компіляторові "бачити" за межами поточної області видимості. Особливо часто це доводиться робити при перевизначенні функцій-членів. Перевизначена функція-член може викликати відповідну функцію-член базового класу, а потім виконувати деяку додаткову роботу (або навпаки).

У наведеному вище класі Dot була перевизначена функція Print ( ). Тіло функції містить оператори, які виводять на екран заголовок “Координати крапки ” і ім'я крапки. Далі викликається функція Print ( ), яка є членом батьківського класу Coord, за допомогою оператора:

Coord :: Print ( ) ;

Член батьківського класу Coord функція Print ( ) виводить на екран у тому ж рядку координати точки. У результаті на екрані з'явиться, наприклад текст:

Координати точки A : x = 4 y = 5