Методы классов и множественное наследование — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Методы классов и множественное наследование

2020-05-08 186
Методы классов и множественное наследование 0.00 из 5.00 0 оценок
Заказать работу

Рассмотрим пример множественного наследования. Пусть нам для некоторых служащих необходимо указать их образование в программе EMPLOY. Теперь пред­положим, что в другой программе у нас существует класс student, в котором ука­зывается образование каждого студента. Тогда вместо изменения класса employee мы воспользуемся данными класса student с помощью множественного наследо­вания.

В классе student содержатся сведения о школе или университете, которые за­кончил студент, и об уровне полученного им образования. Эти данные хранятся в строковом формате. Методы getedu() и putedu() позволяют нам ввести данные о студенте и просмотреть их.

Информация об образовании нужна нам не для всех служащих. Предполо­жим, что нам не нужны записи об образовании рабочих, а необходимы только записи об ученых и менеджерах. Поэтому мы модифицируем классы manager и scientist так, что они будут являться производными классов employee и student, как показано на рис. 11.3.

 

 

 


Рис. 11.3. Диаграмма классов UML программы EMPMULT

 

Эта маленькая программа показывает только взаимосвязь между классами:

class student { }:

class employee { }:

class manager: public employee, private student { }:

class scientist: private employee, private student { }:

class laborer: public employee { }:

Теперь мы рассмотрим эти классы более детально в листинге EMPMULT.

// empmult.cpp

// множественное наследование

#include <iostream>

using namespace std;

const int LEN = 80;    // максимальная длина имени

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

class student   // сведения об образовании

{

private:

char school[ LEN ]; // название учебного заведения

char degree[ LEN ]; // уровень образования

public:

void getedu () {

cout << " Введите название учебного заведения: ";

cin >> school;

cout << " Введите степень высшего образования";

cout << " (неполное высшее, бакалавр, магистр, кандидат наук): ";

cin >> degree;

}

void putedu () const {

cout << "\n Учебное заведение: " << school;

cout << "\n Степень: " << degree;

}

};

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

class employee // некий сотрудник

{

private:

char name[ LEN ]; // имя сотрудника

unsigned long number; // номер сотрудника

public:

void getdata () {

cout << "\n Введите фамилию: ";

cin >> name;

cout << " Введите номер: ";      

cin >> number;

}

void putdata () const {

cout << "\n Фамилия: " << name;

cout << "\n Номер: " << number;

}

};

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

class manager: private employee, private student // менеджер

{

private:

char title[ LEN ]; // должность сотрудника

double dues;    // сумма взносов в гольф-клуб

public:

void getdata () {

employee::getdata ();

cout << " Введите должность: ";

cin >> title;

cout << " Введите сумму взносов в гольф-клуб: ";

cin >> dues;

student::getedu ();

}

void putdata () const {

employee::putdata ();

cout << "\n Должность: " << title;

cout << "\n Сумма взносов в гольф-клуб: " << dues;

student::putedu ();

}

};

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

class scientist: private employee, private student // ученый

{

private:

int pubs; // количество публикаций

public: void getdata ()

{

employee::getdata ();

cout << " Введите количество публикаций: ";

cin >> pubs;

student::getedu ();

              }

void putdata () const {

employee::putdata ();

cout << "\n Количество публикаций: " << pubs;

student::putedu ();

}

};

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

class laborer: public employee // рабочий

{

};

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

int main ()

{

manager m1;

scientist s1, s2;

laborer l1;

// введем информацию о нескольких сотрудниках

cout << endl;

cout << "\nВвод информации о первом менеджере";

m1.getdata ();

cout << "\nВвод информации о первом ученом";

s1.getdata ();

cout << "\nВвод информации о втором ученом";

s2.getdata ();

cout << "\nВвод информации о первом рабочем";

l1.getdata ();

//выведем полученную информацию на экран

cout << "\nИнформация о первом менеджере";

m1.putdata ();

cout << "\nИнформация о первом ученом";

s1.putdata ();

cout << "\nИнформация о втором ученом";

s2.putdata ();

cout << "\nИнформация о первом рабочем";

l1.putdata ();

cout << endl;

return 0;

}

Функции getdata() и putdata() классов manager и scientist зключают в себя такие вызовы функций класса student, как

student::getedu (): и

student::putedu ();

 Эти методы доступны классам manager и scientist, поскольку названные клас­сы наследуются от класса student.

Рассмотрим небольшой пример работы программы EMPMULT:

Введите данные для менеджера 1 Введите фамилию: Иванов Введите номер: 12 Введите должность: Вице-президент Введите сумму сзносов в гольф-клуб: 1000000 Ведите название школы или университета: СПбГУ Введите полученную ученую степень: бакалавр

Введите данные для ученого 1 Введите фамилию: Петров Введите номер: 764 Введите количество публикаций: 99 Введите название школы или университета: МГУ Введите полученную ученую степень: кандидат наук

Введите данные для ученого 2 Введите фамилию: Сидоров Введите номер: 845 Введите количество публикаций: 101 Введите название школы или университета: МГУ Введите полученную ученую степень: доктор наук

Введите данные для рабочего 1 Введите фамилио: Строкин Введите номер: 48323

Как мы в.вдим, программы EMPLOY и EMPLOY2 работают примерно одинаково.

 


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.