Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Lab_6.cpp
- #include "stdafx.h"
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <iostream>
- #include <locale.h>
- #include <string>
- using namespace std;
- class TKvartira
- {
- protected:
- int FFloor;
- int FHeight;
- int FArea;
- int FNumberOfRooms;
- bool FBalcony;
- public:
- TKvartira(); // Конструктор по умолчанию
- TKvartira(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony);
- virtual ~TKvartira(); // виртуальный деструктор
- virtual void Print() = 0; // виртуальный метод вывода сведений о Квартире
- virtual void Input() = 0;// виртуальный метод ввода сведений о Квартире
- int GetAreaOfRooms() { return FNumberOfRooms; }
- int GetFloor() { return FFloor; }
- int GetHeight() { return FHeight; }
- int GetArea() { return FArea; }
- int GetBalcony() { return FBalcony; }
- void SetID(int ID) { FNumberOfRooms = ID; }
- void SetFloor(int Floor) { FFloor = Floor; }
- void SetSurFloor(int surFloor) { FHeight = surFloor; }
- void SetArea(int Area) { FArea = Area; }
- void SetBalcony(int Area) { FArea = Area; }
- };
- class TVedom :public TKvartira
- {
- public:
- TVedom(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony); // Конструктор с парамметрами
- TVedom(); // Конструктор по умолчанию
- TVedom(TVedom &A); // Конструктор копирования
- ~TVedom();// Деструктор по умолчанию
- TVedom& operator =(const TVedom &A); // Перегруженная операция =
- void Input(); // перегруженный виртуальный метод
- void Print(); // перегруженный виртуальный метод
- };
- class TChastnaya :public TKvartira
- {
- public:
- TChastnaya();// Конструктор по умолчанию
- TChastnaya(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony);// Конструктор инициализатор
- TChastnaya(TChastnaya &A);// Конструктор копирования
- ~TChastnaya();// Деструктор
- TChastnaya& operator =(const TChastnaya &A);// Перегруженная операция =
- void Input();// перегруженный виртуальный метод
- void Print();// перегруженный виртуальный метод
- };
- TKvartira::TKvartira()
- {// Конструктор по умолчанию базового класса Квартира
- FNumberOfRooms = 0;
- FFloor = 0;
- FHeight = 0;
- FArea = 0;
- FBalcony = false;
- cout << "**** Конструктор по умолчанию базового класса Квартира" << endl;
- }
- TKvartira::TKvartira(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony)
- {// Конструктор инициализатор базового класса Квартира
- FNumberOfRooms = NumberOfRooms;
- FFloor = Floor;
- FHeight = Height;
- FArea = Area;
- FBalcony = Balcony;
- cout << "**** Конструктор инициализатор базового класса Квартира" << endl;
- }
- TKvartira::~TKvartira()
- {//Деструктор базового класса Квартира
- cout << "**** Деструктор базового класса Квартира" << endl;
- }
- TVedom::TVedom(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony) :TKvartira(Floor, Height, Area, NumberOfRooms, Balcony)
- {// Конструктор инициализатор класса Ведомственная квартира
- cout << "**** Конструктор инициализатор класса Ведомственная квартира" << endl;
- }
- TVedom::TVedom()
- {//Конструктор по умолчанию класса Ведомственная квартира
- FNumberOfRooms = 0;
- FFloor = 0;
- FHeight = 0;
- FArea = 0;
- FBalcony = false;
- cout << "**** Конструктор по умолчанию класса Ведомственная квартира" << endl;
- }
- TChastnaya::TChastnaya(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony) :TKvartira(Floor, Height, Area, NumberOfRooms, Balcony)
- {//Конструктор инициализатор класса Частная квартира
- cout << "**** Конструктор инициализатор класса Частная квартира" << endl;
- }
- TChastnaya::TChastnaya()
- {//Конструктор по умолчанию класса Частная квартира
- FNumberOfRooms = 0;
- FFloor = 0;
- FHeight = 0;
- FArea = 0;
- FBalcony = false;
- cout << "**** Конструктор по умолчанию класса Частная квартира" << endl;
- }
- TVedom::TVedom(TVedom &A)
- {//Конструктор копирования класса Ведомственная квартира
- FNumberOfRooms = A.FNumberOfRooms;
- FFloor = A.FFloor;
- FHeight = A.FHeight;
- FArea = A.FArea;
- FBalcony = A.FBalcony;
- cout << "**** Конструктор копирования класса Ведомственная квартира" << endl;
- }
- TChastnaya& TChastnaya::operator =(const TChastnaya &A)
- {//Перегруженная операция = класса Частная квартира
- FNumberOfRooms = A.FNumberOfRooms;
- FFloor = A.FFloor;
- FHeight = A.FHeight;
- FArea = A.FArea;
- FBalcony = A.FBalcony;
- cout << "**** Перегруженная операция = класса Частная квартира" << endl;
- return *this;
- }
- TVedom& TVedom::operator =(const TVedom &A)
- {//Перегруженная операция = класса Ведомственная квартира
- FNumberOfRooms = A.FNumberOfRooms;
- FFloor = A.FFloor;
- FHeight = A.FHeight;
- FArea = A.FArea;
- FBalcony = A.FBalcony;
- cout << "**** Перегруженная операция = класса Ведомственная квартира" << endl;
- return *this;
- }
- TChastnaya::TChastnaya(TChastnaya &A)
- {//Конструктор копирования класса Частная квартира
- FNumberOfRooms = A.FNumberOfRooms;
- FFloor = A.FFloor;
- FHeight = A.FHeight;
- FArea = A.FArea;
- FBalcony = A.FBalcony;
- cout << "****Конструктор копирования класса Частная квартира" << endl;
- }
- void TVedom::Input()
- {//Ввод сведений о Ведомственная квартира:
- cout << "Ввод сведений о Ведомственная квартира" << endl;
- cout << "Введите количество комнат ведомственной квартиры: ";
- cin >> FNumberOfRooms;
- cout << "Введите этаж: ";
- cin >> FFloor;
- cout << "Введите высоту: ";
- cin >> FHeight;
- cout << "Введите площадь: ";
- cin >> FArea;
- cout << "Введите наличие балкона(0,1): ";
- cin >> FBalcony;
- cout << "**** Перегруженный виртуальный метод Input класса Ведомственная квартира" << endl;
- }
- void TChastnaya::Input()
- {//Ввод сведений о Частная квартира:
- cout << "Ввод сведений о Частная квартира:" << endl;
- cout << "Введите количество комнат частной квартиры: ";
- cin >> FNumberOfRooms;
- cout << "Введите этаж: ";
- cin >> FFloor;
- cout << "Введите высоту: ";
- cin >> FHeight;
- cout << "Введите площадь: ";
- cin >> FArea;
- cout << "Введите наличие балкона(0,1): ";
- cin >> FBalcony;
- cout << "**** Перегруженный виртуальный метод Input класса Частная квартира" << endl;
- }
- void TVedom::Print()
- {// Перегруженный виртуальный метод класса Ведомственная квартира
- cout << "\t" << FNumberOfRooms << "\t" << FFloor << "\t" << FHeight << "\t" << FArea << "\t" << FBalcony << endl;
- }
- void TChastnaya::Print()
- {// Перегруженный виртуальный метод Print класса Частная квартира
- cout << "\t" << FNumberOfRooms << "\t" << FFloor << "\t" << FHeight << "\t" << FArea << "\t" << FBalcony << endl;
- }
- TVedom::~TVedom()
- {//Перегруженный виртуальный Деструктор класса Ведомственная квартира
- cout << "**** Перегруженный виртуальный Деструктор класса Ведомственная квартира" << endl;
- }
- TChastnaya::~TChastnaya()
- {//Перегруженный виртуальный Деструктор класса Частная квартира
- cout << "**** Перегруженный виртуальный Деструктор класса Частная квартира" << endl;
- }
- //-----------------------------------------------
- class TZdanie
- {
- private:
- int FCounTVedoms; // Количество Ведомственная квартира
- int FCounTChastnaya; //Количество Частная квартира
- TVedom *FVedom; // Массив Ведомственная квартира
- TChastnaya *FChastnaya;// Массив Частная квартира
- public:
- TZdanie();// Конструктор по умолчанию
- ~TZdanie();// Деструктор
- void Print();
- void AddVedom(TVedom &A);// Добавление Ведомственная квартира
- void AddChastnaya(TChastnaya &A);//Добавление Частная квартира
- void DelVedom(int c);//Удаление Ведомственная квартира
- void DelChastnaya(int c);//Удаление Частная квартира
- TVedom* GeTVedom(int c) { return &FVedom[c]; }
- TChastnaya* GeTChastnaya(int c) { return &FChastnaya[c]; }
- int GetCounTVedoms() { return FCounTVedoms; }
- int GetCounTChastnaya() { return FCounTChastnaya; }
- };
- TZdanie::TZdanie()
- {//Конструктор по умолчанию класса Здание
- FCounTVedoms = 0;
- FCounTChastnaya = 0;
- FVedom = NULL;
- FChastnaya = NULL;
- cout << "**** Конструктор по умолчанию класса Здание" << endl;
- }
- void TZdanie::AddVedom(TVedom &A)
- {//Метод добавления Ведомственная квартира класса Командa
- int i;
- TVedom t;
- TVedom *tmp = new TVedom[FCounTVedoms + 1];
- for (i = 0; i<FCounTVedoms; i++)
- tmp[i] = FVedom[i];
- tmp[FCounTVedoms] = A;
- delete[] FVedom;
- FVedom = tmp;
- FCounTVedoms++;
- cout << "**** Метод добавления Ведомственная квартира класса Здание" << endl;
- }
- void TZdanie::AddChastnaya(TChastnaya &A)
- {//Метод добавления Частная квартира класса Здание
- int i;
- TChastnaya *tmp = new TChastnaya[FCounTChastnaya + 1];
- for (i = 0; i<FCounTChastnaya; i++)
- tmp[i] = FChastnaya[i];
- tmp[FCounTChastnaya] = A;
- delete[] FChastnaya;
- FChastnaya = tmp;
- FCounTChastnaya++;
- cout << "**** Метод добавления Частная квартира класса Здание" << endl;
- }
- void TZdanie::DelVedom(int c)
- {//Метод удаления Ведомственная квартира класса Здание
- int i;
- TVedom *tmp = new TVedom[FCounTVedoms - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FVedom[i];
- for (i = c + 1; i<FCounTVedoms; i++)
- tmp[i - 1] = FVedom[i];
- delete[] FVedom;
- FVedom = tmp;
- FCounTVedoms--;
- cout << "**** Метод удаления Ведомственная квартира класса Здание" << endl;
- }
- void TZdanie::DelChastnaya(int c)
- {//Метод удаления Частная квартира класса Здание
- int i;
- TChastnaya *tmp = new TChastnaya[FCounTChastnaya - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FChastnaya[i];
- for (i = c + 1; i<FCounTChastnaya; i++)
- tmp[i - 1] = FChastnaya[i];
- delete[] FChastnaya;
- FChastnaya = tmp;
- FCounTChastnaya--;
- cout << "**** Метод удаления Частная квартира класса Здание" << endl;
- }
- TZdanie::~TZdanie()
- {// Деструктор класса Здание
- if (FVedom != NULL)
- delete[] FVedom;
- if (FChastnaya != NULL)
- delete[] FChastnaya;
- cout << "**** Деструктор класса Здание" << endl;
- }
- void TZdanie::Print()
- {// Метод вывод сведений о здании класса Здание
- int i;
- cout << "Ведомственная квартираи:" << endl;
- for (i = 0; i<FCounTVedoms; i++)
- FVedom[i].Print();
- cout << "Вратари:" << endl;
- for (i = 0; i<FCounTChastnaya; i++)
- FChastnaya[i].Print();
- cout << "**** Метод вывод сведений о здании класса Здание" << endl;
- }
- //-----------------------------------------------------
- class TProcessor
- {// Класс обработчик
- private:
- TZdanie* t; // Здание
- int max1, max2, max3, imax1, imax2, imax3;
- int min1, min2, min3, imin1, imin2, imin3;
- public:
- TProcessor();// Конструктор по умолчанию
- ~TProcessor();//Деструктор
- void Search();
- void AddVedom(TVedom &A) { t->AddVedom(A); } // Добавить Ведомственная квартира
- void AddChastnaya(TChastnaya &A)
- {
- t->AddChastnaya(A);
- }// Добавить Частная квартира
- void DelVedom(int c) { t->DelVedom(c); }//Удалить Ведомственная квартира
- void DelChastnaya(int c)
- {
- t->DelChastnaya(c);
- }//Удалить Частная квартира
- void Print() { t->Print(); }// Вывод сведений о здании
- };
- TProcessor::TProcessor()
- {// Конструктор по умолчанию класса Обработчик
- t = new TZdanie();
- cout << "**** Конструктор по умолчанию класса Обработчик" << endl;
- }
- TProcessor::~TProcessor()
- {// Деструктор класса Обработчик
- delete t;
- cout << "**** Деструктор класса Обработчик" << endl;
- };
- void TProcessor::Search()
- {
- cout << "По какому параметру произвести поиск?" << endl;
- int option;
- cout << "1-Площадь" << endl;
- cout << "2-Количество комнат" << endl;
- cout << "3-Этаж" << endl;
- cout << "4-Наличие балкона" << endl;
- cout << "5-Высота потолков" << endl;
- cout << "Ваш выбор: ";
- cin >> option;
- switch (option)
- {
- case 1:
- {
- int value;
- cout << "Введите площадь: ";
- cin >> value;
- cout << "Квартиры с площадью больше " << value << endl;
- for (int i = 0; i<t->GetCounTChastnaya(); i++)
- if (t->GeTChastnaya(i)->GetArea()>=value)
- t->GeTChastnaya(i)->Print();
- for (int i = 0; i<t->GetCounTVedoms(); i++)
- if (t->GeTVedom(i)->GetArea() >= value)
- t->GeTVedom(i)->Print();
- }
- case 2:
- {
- int value;
- cout << "Введите количество комнат: ";
- cin >> value;
- cout << "Квартиры с количеством комнат больше " << value << endl;
- for (int i = 0; i<t->GetCounTChastnaya(); i++)
- if (t->GeTChastnaya(i)->GetAreaOfRooms() >= value)
- t->GeTChastnaya(i)->Print();
- for (int i = 0; i<t->GetCounTVedoms(); i++)
- if (t->GeTVedom(i)->GetAreaOfRooms() >= value)
- t->GeTVedom(i)->Print();
- }
- case 3:
- {
- int value;
- cout << "Введите этаж: ";
- cin >> value;
- cout << "Квартиры с этажом " << value << endl;
- for (int i = 0; i<t->GetCounTChastnaya(); i++)
- if (t->GeTChastnaya(i)->GetFloor() == value)
- t->GeTChastnaya(i)->Print();
- for (int i = 0; i<t->GetCounTVedoms(); i++)
- if (t->GeTVedom(i)->GetFloor() >= value)
- t->GeTVedom(i)->Print();
- }
- case 4:
- {
- int value;
- cout << "Введите наличие балкона(0,1): ";
- cin >> value;
- cout << "Квартиры с балконом " << value << endl;
- for (int i = 0; i<t->GetCounTChastnaya(); i++)
- if (t->GeTChastnaya(i)->GetBalcony() == value)
- t->GeTChastnaya(i)->Print();
- for (int i = 0; i<t->GetCounTVedoms(); i++)
- if (t->GeTVedom(i)->GetBalcony() == value)
- t->GeTVedom(i)->Print();
- }
- case 5:
- {
- int value;
- cout << "Введите высоту потолков: ";
- cin >> value;
- cout << "Квартиры с высотой потолков больше " << value << endl;
- for (int i = 0; i<t->GetCounTChastnaya(); i++)
- if (t->GeTChastnaya(i)->GetHeight() >= value)
- t->GeTChastnaya(i)->Print();
- for (int i = 0; i<t->GetCounTVedoms(); i++)
- if (t->GeTVedom(i)->GetHeight() >= value)
- t->GeTVedom(i)->Print();
- }
- default:
- break;
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- int CounTVedoms, CounTChastnaya;
- int i;
- cout << "Введите количество Ведомственная квартира: ";
- cin >> CounTVedoms;
- cout << "Введите количество Частная квартира: ";
- cin >> CounTChastnaya;
- TVedom *A = new TVedom[CounTVedoms];
- for (i = 0; i<CounTVedoms; i++)
- A[i].Input();
- TChastnaya *B = new TChastnaya[CounTChastnaya];
- for (i = 0; i<CounTChastnaya; i++)
- B[i].Input();
- // Работа с классом Обработчик
- cout << "\n Работа с классом Обработчик" << endl;
- TProcessor *p = new TProcessor;
- for (i = 0; i<CounTVedoms; i++)
- p->AddVedom(A[i]);
- for (i = 0; i<CounTChastnaya; i++)
- p->AddChastnaya(B[i]);
- cout << " Все квартиры в здании: \n";
- p->Print();
- p->Search();
- system("pause");
- delete[] A;
- delete[] B;
- delete p;
- // Работа с массивом указателей на тип базового класса
- cout << "\n Работа с массивом указателей на тип базового класса\n" << endl;
- TKvartira **array_zdanie;
- array_zdanie = new TKvartira*[CounTVedoms + CounTChastnaya];
- for (i = 0; i<CounTVedoms; i++)
- array_zdanie[i] = new TVedom;
- for (i = CounTVedoms; i<CounTVedoms + CounTChastnaya; i++)
- array_zdanie[i] = new TChastnaya;
- cout << "\n Ввод сведений о здании:\n" << endl;
- for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
- array_zdanie[i]->Input();
- cout << "\n В здании имеются следующие квартиры:\n" << endl;
- for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
- array_zdanie[i]->Print();
- for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
- delete array_zdanie[i];
- delete[] array_zdanie;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement