ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн
Включение в программе EMPCONT
Давайте в программе EMPMULT применим включение вместо наследования. Клас- сы manager и scientist программы EMPMULT являются производными классов employee и student. Здесь использовано наследование. В нашей новой программе
EPMCONT классы manager и scientist содержат копии классов employee и student как атрибуты. Взаимосвязи этого объединения показаны на рис. 9.12.
Рис. 9.12. Диаграмма классов UML для программы EMPCONT
Рассмотренная ниже небольшая программа показывает, как осуществлены эти взаимосвязи другим способом:
class student
{ };
class employee
{ };
class manager
{
student stu;
employee emp;
};
class scientist
{
student stu;
employee emp;
};
class laborer
{
employee emp;
};
Вот полный листинг программы EMPCONT:
// empcont.cpp
//
#include <iostream>
#include <string>
using namespace std;
///////////////////////////////////////////////////////////
class student
{
private:
string school;
string degree;
public:
void getedu ( )
{
cout << " Введите название учебного заведения: "; cin >> school;
cout << " Введите уровень образования\n";
cout << " (неполное высшее, бакалавр, магистр, кандидат наук): ";
cin >> degree;
}
void putedu ( ) const
{
cout << "\n Учебное заведение: " << school;
cout << "\n Степень: " << degree;
}
};
///////////////////////////////////////////////////////////
class employee
{
private:
string name;
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:
string title;
double dues;
employee emp;
student stu;
public:
void getdata ( )
{
emp.getdata ( );
cout << " Введите должность: "; cin >> title;
cout << " Введите сумму взносов в гольф-клуб: "; cin >> dues;
stu.getedu ( );
}
void putdata ( ) const
{
emp.putdata ( );
cout << "\n Должность: " << title;
cout << "\n Сумма взносов в гольф-клуб: " << dues;
stu.putedu ( );
}
};
///////////////////////////////////////////////////////////
class scientist
{
private:
int pubs;
employee emp;
student stu;
public:
void getdata ( )
{
emp.getdata ( );
cout << " Введите количество публикаций: "; cin >> pubs;
stu.getedu ( );
}
void putdata ( ) const
{
emp.putdata ( );
cout << "\n Количество публикаций: " << pubs;
stu.putedu ( );
}
};
///////////////////////////////////////////////////////////
class laborer
{
private:
employee emp;
public:
void getdata ( )
{ emp.getdata ( ); }
void putdata ( ) const
{ emp.putdata ( ); }
};
///////////////////////////////////////////////////////////
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;
}
Классы employee и student в программе EMPCONT те же, что и в EMPMULT, но с классами manager и scientist они связаны другим способом.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42