русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Складніший приклад успадковування


Дата додавання: 2014-04-22; переглядів: 919.


Розглянемо складніший приклад використання успадковування. Раніше ми ввели клас Distance (починаючи з програми 11.3), в якому припускалося, що інтервал може мати тільки додатнє значення. Створимо новий похідний клас, який міститиме додаткове поле, куди будемо записувати знак – додатній або від’ємний. Також змінимо методи класу, щоб вони могли працювати зі знаковим значенням інтервалу. Далі приведено лістінг програми 11.5

#include <iostream.h>

#include <conio.h>

#include <bios.h>

enum posneg{pos,neg};

class Distance

{protected:

int feet;

float inches;

public:

 

Distance():feet(0),inches(0.0) //конструктор без аргументів

{ }

//конструктор з 2 аргументами

Distance(int ft,float in):feet(ft),inches(in)

{ }

 

void getdist()

{cout <<"\nВведіть число футів "; cin >>feet;

cout << "Дюймів "; cin>>inches;

}

 

void showdist()

{cout <<feet << "\' "<< inches <<"\''";}

};

//////////////

class DistSign:public Distance

{

private:

posneg sign;

public:

DistSign():Distance()

{sign=pos;}

 

DistSign(int ft,float in,posneg sg=pos):Distance(ft,in)

{

sign=sg;

}

 

void getdist()

{ Distance::getdist();

char ch;

cout<<"Введіть + чи -";

ch=getch();

if (ch=='+')

sign=pos;

else

sign=neg;

}

 

void showdist() const

{cout<<((sign==pos)?"(+)":"(-)");

Distance::showdist();

}

};

///////////////

int main()

{

clrscr();

DistSign alpha;

alpha.getdist();

DistSign beta(11,6.25);

DistSign gamma(100,5.5,neg);

//Вивід

cout<<"\nA=";alpha.showdist();

cout<<"\nB=";beta.showdist();

cout<<"\nC=";gamma.showdist();

cout<<endl;

bioskey(0);

return 0;

}

 

Програма 11.5

Ми ввели клас DistSign, до якого додали можливість роботи зі знаковими числами. Клас Distance в цій програмі такий сам, як і в попередньому, з тією різницею, що його дані описані як protected. Фактично в цьому випадку специфікатор міг бути і private, оскільки нема методів похідного класу, які б потребували доступу до даних класу Distance. Але, якщо виникне потреба в доступі, то його завжди можна буде здійснити.

 

Використання програми 11.5

В функції main() програми оголошені три інтервали. Інтервал alpha дістає значення від користувача, beta ініціалізується набором (11,6.25) і знаком + за замовчуванням, gamma – набором (100,5.5,neg) , де neg означає знак -.

Клас DistSign є похідним класу Distance. До нього додане поле sign типу posneg. Поле sign призначене для зберігання знаку інтервалу. Тип posneg визначений в операторі enum і має два можливі значення – pos і neg.

 


<== попередня лекція | наступна лекція ==>
Виклик методів похідного класу | Конструктори класу DistSign


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн