Листинг_DZ(VS)_2014 (Методические указания к лабораторным работам), страница 6
Описание файла
Файл "Листинг_DZ(VS)_2014" внутри архива находится в следующих папках: Методические указания к лабораторным работам, ЛР_15_КЛР_ПКШ. Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Онлайн просмотр документа "Листинг_DZ(VS)_2014"
Текст 6 страницы из документа "Листинг_DZ(VS)_2014"
class Home;
////////////////////////////
// Home - конструкторы
//////////////////////////// Класс Home
// Конструктор без параметров
Home::Home(): AbstrHome() {
Home_Number = NULL;
iHome = NULL;
no = NULL;
EtagCount = NULL;
MenCount = NULL;
TypeHome = fast;
NumbApartament = NULL;
HomeRemont = false;
};
//////////////////////////// Класс Home
// Класс Home: Деструктор
////////////////////////////
Home::~Home( )
{
if ( Home_Number != (char *)NULL) delete []Home_Number;
};
//////////////////////////// Класс Home
// Конструтрор копирования
Home::Home( Home & H): AbstrHome() {
no = 0;
if ( H.name != (char *)NULL )
{ name= new char[strlen(H.getName()) + 1];
strcpy_s(name , strlen(H.getName()) + 1 , H.getName());}
else
name = (char *)NULL;
if ( H.Home_Number != (char *)NULL )
{ Home_Number = new char[strlen(H.Home_Number) + 1];
strcpy_s(Home_Number , strlen(H.Home_Number) + 1, H.Home_Number); }
else
Home_Number = (char *)NULL;
iHome = H.iHome;
EtagCount = H.EtagCount;
MenCount = H.MenCount;
TypeHome = H.TypeHome;
NumbApartament = H.NumbApartament;
HomeRemont = H.HomeRemont;
};
//////////////////////////// Класс Home
// Конструктор: номер дома и имя для поиска (name)
Home::Home(const char *HomName, const char *Number) {
// Имя
if ( HomName != (char *)NULL )
{name= new char[strlen(HomName) + 1];
strcpy_s(name, strlen(HomName) + 1 , HomName);
}
else
name = (char *)NULL;
// Номер дома
if ( Number != (char *)NULL )
{Home_Number = new char[strlen(Number) + 1];
strcpy_s(Home_Number , strlen(Number) +1 , Number); }
else
Home_Number = (char *)NULL;
iHome = NULL;
EtagCount = NULL;
MenCount = NULL;
TypeHome = fast;
NumbApartament = NULL;
HomeRemont = false;
};
//////////////////////////// Класс Home
// Конструктор: номер дома и имя/номер для поиска (name)
Home::Home(const char *HomName, const char *Number, int Numb) {
// Имя
if ( HomName != (char *)NULL )
{name= new char[strlen(HomName) + 1];
strcpy_s(name , strlen(HomName) + 1, HomName); }
else
name = (char *)NULL;
// Номер
if ( Number != (char *)NULL )
{Home_Number = new char[strlen(Number) + 1];
strcpy_s(Home_Number , strlen(Number) + 1 , Number); }
else
Home_Number = (char *)NULL;
//
iHome = Numb;
EtagCount = NULL;
MenCount = NULL;
TypeHome = fast;
NumbApartament = NULL;
HomeRemont = false;
}
//////////////////////////// Класс Home
// Конструктор со всеми параметрами
Home::Home(const char *HomName, const char *Number, int Numb,
int Etag, int Men,HomeType Type,int Apart) {
//Имя
if ( HomName != (char *)NULL )
{name= new char[strlen(HomName) + 1];
strcpy_s(name , strlen(HomName) + 1, HomName); }
else
name = (char *)NULL;
// Номер
if ( Number != (char *)NULL )
{Home_Number = new char[strlen(Number) + 1];
strcpy_s(Home_Number , strlen(Number) +1 , Number); }
else
Home_Number = (char *)NULL;
//
iHome = Numb;
EtagCount = Etag;
MenCount = Men;
TypeHome = Type;
NumbApartament = Apart;
HomeRemont = false;
}
//////////////////////////// Класс Home
// Конструктор копирования
Home Home::operator =(Home & H ) {
// Имя
if ( H.name != (char *)NULL )
{ name= new char[strlen(H.getName()) + 1];
strcpy_s(name , strlen(H.getName()) + 1 , H.getName());}
else
name = (char *)NULL;
// Номер
if ( H.Home_Number != (char *)NULL )
{ Home_Number = new char[strlen(H.Home_Number) + 1];
strcpy_s(Home_Number , strlen(H.Home_Number) + 1, H.Home_Number); }
else
Home_Number = (char *)NULL;
//
iHome = H.iHome;
EtagCount = H.EtagCount;
MenCount = H.MenCount;
TypeHome = H.TypeHome;
NumbApartament = H.NumbApartament;
HomeRemont = H.HomeRemont;
return *this;
};
/////////////////////
// Методы класса Home
/////////////////////
// Метод печати дома
//////////////////
void Home::printOn(ostream & out) {
//
out << "Номер сп. -" <<no ;
if ( name !=(char *)NULL)
{out << " Имя - " << name << endl; }
else
{out << " Имя не задано " << endl; };
//
if ( Home_Number !=(char *)NULL)
out << "Номер сим. -" << Home_Number << endl;
else
{out << " Символьное имя не задано " << endl; };
//
out << " Номер -" << iHome << endl <<
"Этажей -" << EtagCount << " Жителей -" << MenCount << endl;
if (TypeHome == fast)
cout << "Тип дома - простой ";
if (TypeHome == multiple)
cout << "Тип дома - много строений ";
if (TypeHome == complex)
cout << "Тип дома - сложный ";
if ( HomeRemont ) cout << " Требуется ремонт! ";
else cout << " Ремонт не нужен! ";
cout << " Число квартир - " << NumbApartament << endl<< endl;
}
//////////////////////////// Класс Home
// Метод - Установить имя
//////////////////
void Home::setName(const char *HomName , const char *Number){
// Имя из базового класса - резерв для приска
if ( name != NULL)
delete []name;
if ( HomName != (char *)NULL )
{name= new char[strlen(HomName) + 1];
strcpy_s(name , strlen(HomName) + 1 , HomName); }
else
name = (char *)NULL;
// Имя дома
if ( Home_Number != NULL)
delete []Home_Number;
if ( Number != NULL)
{
Home_Number= new char[strlen(Number) + 1];
strcpy_s(Home_Number , strlen(Number) + 1 , Number);
}
else
Home_Number = (char *)NULL;
};
//////////////////////////// Класс Home
// Метод - Установить все параметры
//////////////////
void Home::setAllParam(const char *HomName , const char *Number, int iH, int Etag ,
int Men ,HomeType Type, int Apart , BOOL rem)
{
// Имя из базового класса - резерв для приска
if ( name != NULL)
delete []name;
if ( HomName != (char *)NULL )
{name= new char[strlen(HomName) + 1];
strcpy_s(name, strlen(HomName) + 1, HomName); }
else
name = (char *)NULL;
// Имя из базового класса - резерв для приска
if ( Home_Number != NULL)
delete []Home_Number;
if ( Number != NULL)
{
Home_Number= new char[strlen(Number) + 1];
strcpy_s(Home_Number , strlen(Number) + 1, Number) ;
}
else
Home_Number = (char *)NULL;
//
iHome= iH;
EtagCount= Etag;
MenCount= Men;
TypeHome = Type;
NumbApartament = Apart;
HomeRemont = rem;
};
// Методы дружественные - friend
//////////////////////////// Класс Home
// Перегрузка сложения домов
//////////////////
Home & operator +(Home & H1 , Home & H2)
{
Home *pTemp = new Home; // новый объект для сложения
//
pTemp->no = H1.no;
// Имя базового - сумма имен
pTemp->name = new char[strlen(H1.name) + strlen(H2.name)+ 5 ]; // учтем пробелы!
pTemp->name[0]='\0';
if (H1.name != NULL)
strcpy_s(pTemp->name, strlen(H1.name) + 1 , H1.name);
if (H2.name != NULL)
{
strcat_s(pTemp->name, strlen(H1.name) + strlen(H2.name)+ 5 ," + ");
strcat_s(pTemp->name, strlen(H1.name) + strlen(H2.name)+ 5 ,H2.name);
};
// Имя = сумма имен Home_Number
pTemp->Home_Number = new char[strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5 ];
pTemp->Home_Number[0]='\0';
if (H1.Home_Number != NULL)
strcpy_s(pTemp->Home_Number, strlen( H1.Home_Number ) + 1 , H1.Home_Number);
if (H2.Home_Number != NULL)
{
strcat_s(pTemp->Home_Number,strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5 ," + ");
strcat_s(pTemp->Home_Number,strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5 ,H2.Home_Number);
};
// Параметры
pTemp-> iHome = H1.iHome;
pTemp-> EtagCount = H1.EtagCount;
pTemp-> MenCount = H1.MenCount + H2.MenCount;
pTemp-> TypeHome = complex;
pTemp-> NumbApartament = H1.NumbApartament + H2.NumbApartament;
pTemp->HomeRemont = (H1.HomeRemont || H2.HomeRemont ) ? true : false ;
return *pTemp;
};
//////////////////////////
// Класс улиц Street
/////////////////////
//// Конструкторы Street
/////////////////////
//// Конструкторы Street
////////////////// Класс Street
// Конструктор: - Пустые параметры
//////////////////
Street::Street():AbstrStreet() {
// для базового класса
no = NULL;
name = (char *)NULL;
Name_Street = (char *)NULL;
Homes_num = NULL;
StrType = two;
Remont = false;
RemontStreet = false;
NumberStreet = NULL;
ListOfNear = (Street *)NULL;
} ;
////////////////// Класс Street
// Конструктор: Имя улицы (Name_Street) и имя для поиска (name) общие
//////////////////
Street::Street(const char *sName) :AbstrStreet() {
if ( sName != (char *) NULL )
{ name= new char[strlen(sName) + 1];
strcpy_s(name , strlen(sName) + 1 , sName);
Name_Street= new char[strlen(sName) + 1];
strcpy_s(Name_Street , strlen(sName) + 1 , sName); }
else
{
name = (char *)NULL;
Name_Street = (char *)NULL;
};
no = NULL;
Homes_num = NULL;
StrType = two;
Remont = false;
RemontStreet = false;
NumberStreet = NULL;
ListOfNear = (Street *)NULL;
};
////////////////// Класс Street
// Конструктор: Имя улицы и имя для поиска разные
//////////////////
Street::Street(const char *sName , const char *sNumb)
:AbstrStreet(){
// Имя базового для поиска
if ( sNumb != (char *) NULL )
{ name= new char[strlen(sNumb) + 1];
strcpy_s(name , strlen(sNumb) + 1 , sNumb);
}
else
name = (char *)NULL;
// Имя улицы
if ( sName != (char *) NULL )
{
Name_Street= new char[strlen(sName) + 1];
strcpy_s(Name_Street, strlen(sName) + 1 , sName); }
else
Name_Street = (char *)NULL;
//
no = NULL;
Homes_num = NULL;
StrType = two;
Remont = false;
RemontStreet = false;
NumberStreet = NULL;
ListOfNear = (Street *)NULL;
};
////////////////// Класс Street
// Конструктор: Номер для поиска
//////////////////
Street::Street(int Num) {
name = (char *)NULL;
Name_Street = (char *)NULL;
no = Num; // Номер из базового для поиска
Homes_num = NULL;
StrType = two;
Remont = false;
RemontStreet = false;
NumberStreet = Num;
ListOfNear = (Street *)NULL;
};
////////////////// Класс Street
// Конструктор: Имя улицы и номер для поиска
//////////////////
Street::Street(const char *sName , int Num) :AbstrStreet() {
// Имя улицы и для поиска
if ( sName != (char *) NULL )
{ name= new char[strlen(sName) + 1];
strcpy_s(name , strlen(sName) + 1, sName);
Name_Street= new char[strlen(sName) + 1];
strcpy_s(Name_Street, strlen(sName) + 1 , sName); }
else
{
name = (char *)NULL;
Name_Street = (char *)NULL;
};
no = Num; // Номер для поиска
Homes_num = NULL;
StrType = two;
Remont = false;
RemontStreet = false;
NumberStreet = Num;
ListOfNear = (Street *)NULL;
};
////////////////// Класс Street*!!!!!!!!!!!!!!!**
// Конструктор копирования
//////////////////
Street::Street(Street & S) :AbstrStreet() {
if ( S.name != (char *) NULL )
{ name= new char[strlen(S.name) + 1];
strcpy_s(name , strlen(S.name) + 1, S.name);
}
else
name = (char *)NULL;
if ( S.Name_Street != (char *) NULL )
{
Name_Street= new char[strlen(S.Name_Street) + 1];
strcpy_s(Name_Street , strlen(S.Name_Street) + 1 , S.Name_Street); }
else
Name_Street = (char *)NULL;
no = S.no;
Homes_num = S.Homes_num;
StrType = S.StrType;
Remont = S.Remont;
RemontStreet = S.RemontStreet;
NumberStreet = S.NumberStreet;