русс | укр

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

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


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


Методи класів та множинне успадковування


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


Розглянемо приклад множинного успадковування. До попередньої програми додамо клас student, в якому зберігатимуться відомості про навчальний заклад, який закінчив студент, а також рівень його освіти. Припустимо, що такі ж відомості нам потрібні також про менеджерів та вчених – працівників компанії. Зробимо відповідні класи похідними також від класу student.

Далі приведений лістінг програми 11.9

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

const int LEN=80;

class student

{private:

char school[LEN];

char degree[LEN];

public:

void getedu()

{cout<<”Школа:”;

cin>>school;

cout<<”Рівень:”;

cin>>degree;

}

void putedu() const

{cout<<”\nШкола=”<<school;

cout<<”\nРівень=”<<degree<<endl;

}

};

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

class employce

{private:

char name[LEN];

unsigned long number;

public:

void getdata()

{cout <<”\nВведіть ПІП: “;cin>>name;

cout <<”\nВведіть номер: “;cin>>number;

}

void putdata() const

{cout<<”\nПІП=”<<name;

cout<<”\nНомер=”<<number;

}

};

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

class manager:private employce, private student

{private:

char title[LEN];

double dues;

public:

void getdata()

{employce::getdata();

cout<<”\nПосада=”;cin>>title;

cout<<”\nВнески=”;cin>>dues;

student::getedu();

}

void putdata() const

{employce::putdata();

cout<<”\nПосада=”<<title;

cout<<”\nВнески=”<<dues;

student::putedu();

}

};

///////////

class scientist:private employce,private student

{private:

int puts;

public:

void getdata()

{ employce::getdata();

cout<<”\nПублікацій=”;cin>>puts;

student::getedu();

}

void putdata() const

{ employce::putdata();

cout<<”\nПублікацій=”<<puts;

student::putedu();

}

};

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

class laborer:public employce

{

};

 

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

int main()

{clrscr();

manager m1;

scientist s1,s2;

laborer l1;

cout<<endl;

cout<<”\nМенеджер 1:”;

m1.getdata();

 

cout<<”\nВчений 1:”;

s1.getdata();

 

cout<<”\nВчений 2:”;

s2.getdata();

 

cout<<”\nРобітник 1:”;

l1.getdata();

 

cout<<”Менеджер1\n”;

m1.putdata();

cout<<”Вчений1\n”;

s1.putdata();

cout<<”Вчений2\n”;

s2.putdata();

cout<<”Робітник1\n”;

l1.putdata();

bioskey(0);

return 0;

}

Програма 11.9

 

Функції getdata() і putdata() класів manager і scientist включають в себе такі виклики функцій класу student як

student::getedu();

і

student::putedu();

Ці методи доступні класам manager і scientist, оскільки ці класи є спадкоємцями класу student.

Класи manager і scientist є приватними спадкоємцями класів employce і student. В цьому випадку нема потреби використовувати загальне успадковування, оскільки об’єкти цих класів не користуються методами базових класів. Натомість клас laborer користується методами базового класу, тому в даному випадку успадковування є загальним.

 


<== попередня лекція | наступна лекція ==>
Рівні успадковування | Конструктори при множинному успадковуванні


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