Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2020-05-08 | 186 |
5.00
из
|
Заказать работу |
|
|
Рассмотрим пример множественного наследования. Пусть нам для некоторых служащих необходимо указать их образование в программе 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!