
- •Отчет по лабораторной работе №3
- •Техническое задание
- •Назначение
- •1. Функциональные характеристики
- •2. Требования к надежности
- •3. Состав и параметры технических средств
- •Требования к программной документации
- •Иерархия классов
- •Класс tObject
- •Класс Organizacion
- •Kласс StrahComp
- •Класс SudoComp
- •Класс Zavod
- •Класс engineer
- •Класс worker
- •Класс Group
- •Главная функция
- •Реализация методов-итераторов
- •Пример программы
Класс Group
// Описание виртуального класса "группа"
Здесь описывается производный класс Kadri от класса TObject. В нём инициализируются стандартный конструктор, конструктор с параметрами, коструктор копирования, деструктор, функции добавления записи в группу, проверки на наличие записей в группе, вывода записей и удаления элемента из группы.
class group : public TObject
{
public:
group(void);
group(char * Name);
group(const group&);
~group();
// Показывает, пуста ли группа
bool Empty();
// Добавление объекта в группу
virtual void Add(TObject * obj) = 0;
// Просмотр списка
void ShowFunc(void);
// Удаляет элемент из группы, но сохраняет его в памяти
void Delete(TObject * ForDelete);
protected:
Item * begin; // Указатель на начало группы
};
Главная функция
#include "stdafx.h"
#include <locale>
#include "Organizacion.h"
#include "SudoComp.h"
#include "StrahComp.h"
#include "Zavod.h"
#include "group.h"
#include "CLERK.h"
#include "WORKER.h"
#include "ENGINEER.h"
#include <typeinfo.h>
#include "TObject.h"
#include "Item.h"
using namespace std;
void action(TObject *obj, int Sex_Of_StrahComp);
Organizacion * Organizacion::begin = NULL;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
// Создаём объект класса 'CLERK'
CLERK CLERK1("\n\nCLERK\n");
// Создаём 2 WORKER
WORKER WORKER1("WORKER 1");
WORKER WORKER2("WORKER 2");
// Добавляем людей в WORKER
// WORKER 1
StrahComp Petr("Петр", 1);
WORKER1.Add(&Petr);
StrahComp Dimitriy("Дмитрий", 1);
WORKER1.Add(&Dimitriy);
// WORKER 2
StrahComp Irina("Ирина", 0);
StrahComp Uriy("Юрий", 1);
StrahComp Oleg("Олег", 1);
WORKER2.Add(&Irina);
WORKER2.Add(&Uriy);
WORKER2.Add(&Oleg);
// Создаём 2 Заводы АлМет
ENGINEER ENGINEER1("ENGINEER 1");
ENGINEER ENGINEER2("ENGINEER 2");
// Сопостовляем людей и тип испытания на заводы
Zavod Victor("Виктор", 1);
Zavod Artem("Артём", 1);
Zavod Vika("Виктория", 0);
Zavod Dmitriy("Дмитрий", 1);
ENGINEER1.Add(&Victor);
ENGINEER2.Add(&Artem);
ENGINEER1.Add(&Vika);
ENGINEER2.Add(&Dmitriy);
SudoComp Vasya("Василий", 1);
SudoComp Elena("Елена", 0);
ENGINEER1.Add(&Vasya);
ENGINEER2.Add(&Elena);
// Прикрепляем WORKER к CLERK
CLERK1.Add(&WORKER1);
CLERK1.Add(&WORKER2);
CLERK1.Add(&ENGINEER1);
CLERK1.Add(&ENGINEER2);
// Вывод иерархии
cout << "\n\nДемонстрация иерархии: \n";
CLERK1.ShowFunc();
// Используем итератор
cout << "\n\n Имена всех Рабочих лиц женского пола,\nс использованием итератора:\n\n";
WORKER2.ForEach(&action, 0);
// Удаляем элементы из списков
WORKER1.Delete(&Petr);
ENGINEER1.Delete(&Vasya);
// Выводим обновлённый список
cout << "\nПосле удаления Василия и Петра: \n";
CLERK1.ShowFunc();
system("pause");
return 0;
}
// Вывод имена сотрудников работающих в WORKER2 и сдавших все Судострой.Компания на 100 баллов.
void action(TObject *obj, int Sex_Of_StrahComp)
{
if( ((StrahComp*)obj)->GetSexOfStrahComp() == Sex_Of_StrahComp )
obj->ShowFunc();
}