Складніший приклад успадковування
Розглянемо складніший приклад використання успадковування. Раніше ми ввели клас Distance (починаючи з програми 11.3), в якому припускалося, що інтервал може мати тільки додатнє значення. Створимо новий похідний клас, який міститиме додаткове поле, куди будемо записувати знак – додатній або від’ємний. Також змінимо методи класу, щоб вони могли працювати зі знаковим значенням інтервалу. Далі приведено лістінг програми 17.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;
}
Програма 17.5
Ми ввели клас DistSign, до якого додали можливість роботи зі знаковими числами. Клас Distance в цій програмі такий сам, як і в попередньому, з тією різницею, що його дані описані як protected. Фактично в цьому випадку специфікатор міг бути і private, оскільки нема методів похідного класу, які б потребували доступу до даних класу Distance. Але, якщо виникне потреба в доступі, то його завжди можна буде здійснити.
Дата добавления: 2015-08-26; просмотров: 708;