Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 3 вариант 10.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
115.78 Кб
Скачать

Класс 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();

}