Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class Dot : public Coord

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

Class Coord

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

Destructor Coord

Destructor Dot

Constructor Dot

Constructor Coord

Class Dot: public Coord

Class Coord

{

public:

// базовий клас

Coord () { cout <<"Constructor Coord \n"; }

~coord () { cout <<"Destructor Coord \n"; }

}

{

public:

Dot () { cout <<"Constructor Dot \n";}

~dot (){ cout <<"Destructor Dot \n";}

}

void main ()

{

Dot A;

}

Результат роботи:

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

Деструктор похідного класу виконується раніше деструктора базового класу. Уся робота з організації відповідного виклику покладає на компілятор і програміст не повинен опікуватися про це.

{

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”

{

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

<== предыдущая лекция | следующая лекция ==>
Метод електронного балансу | Class Derived : public Base1, public Base2
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 328; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.