Листинг_DZ(VS)_2014 (Методические указания к лабораторным работам)
Описание файла
Файл "Листинг_DZ(VS)_2014" внутри архива находится в следующих папках: Методические указания к лабораторным работам, ЛР_15_КЛР_ПКШ. Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Онлайн просмотр документа "Листинг_DZ(VS)_2014"
Текст из документа "Листинг_DZ(VS)_2014"
55
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
УТВЕРЖДАЮ: | |
Большаков С.А. | "__"_____________201X Г. |
Комплексная лабораторная работа/ДЗ по дисциплине ПКШ
“Система классов улиц и домов”
Листинги программ
(вид документа)
писчая бумага
(вид носителя)
37
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-ХХ | _____________________ |
Большаков С.А. | "__"_____________201X г. |
Москва - 201X
________________________________________________________________
СОДЕРЖАНИЕ
Пример программ для ДЗ/КЛР (массив и список) 3
Модуль - DZ.H (для массивов и списков) 3
Модуль - DZ_Class.H (для массивов и списков) 3
Модуль - DZ_LIB.H (для массивов) 5
Модуль - DZ_Array.cpp (для массивов) 16
Модуль - DZ_LIB.H (для списков) 31
Модуль - DZ_List.cpp (для списков) 42
Пример программ для ДЗ/КЛР (массив и список)
// Вариант для Массивов
Модуль - DZ.H (для массивов и списков)
// DZ.H
// Общие константы и описания
#define StreetClass 1
#define HomeClass 2
static BOOL DestructorDeleteObj = false;
enum HomeType{fast, multiple , complex};
enum StreetType{one, two , more };
enum TypeAddDel {tail, head, Number ,NumbAfter, NumbCurrent, NumbBefore,
AssbAfter, AssCurrent, AssBefore , createObj , nocreateObj , deleteObj, nodeleteObj };
Модуль - DZ_Class.H (для массивов и списков)
При включении в проект нужно раскомментировать нужную строку в описании класса Street, соответсвующую своему варианту.
// DZ_Class.h
// Описания классов для варианта массив
#include "stdafx.h"
#include <iostream>
#include "DZ.h" // Общие константы
using namespace std;
// Абстрактный класс для дома
class AbstrHome : public CObject {
public:
virtual int classType() = 0;
virtual char *className() = 0;
virtual void printOn(ostream &) = 0;
AbstrHome(){ name = (char *)NULL;
no = NULL;};
~AbstrHome(){
if( name != (char *)NULL)
delete [] name;
};
char *name; // ? Резерв Поисковое имя
int no; // ? РезервНомер в списке
};
// Абстрактный класс для улицы
class AbstrStreet {
public:
virtual int classType() = 0;
virtual char *className() = 0;
virtual void printOn(ostream &) = 0;
AbstrStreet(){ name = (char *)NULL;
no = NULL;};
~AbstrStreet(){
if( name != (char *)NULL)
delete [] name;
};
char *name; // ? Резерв Поисковое имя
int no; // ? РезервНомер в списке
};
//////////////////////
//// Класс домов
//////////////////////
class Home: public AbstrHome {
// Конструкторы
public:
Home();
Home( Home & H) ;
Home( Home * pH);
Home(const char *HomName, const char *Number);
Home(const char *HomName, const char *Number, int Numb) ;
Home(const char *HomName, const char *Number, int Numb,
int Etag, int Men=0,HomeType Type = fast,int Apart=0);
// Деструктор
~Home();
//Оператор присваивания для поддержки перегрузки "+"
Home operator =(Home & H );
// Виртуальные методы
public:
virtual int classType() { return HomeClass; }
virtual char *className() { return "Home"; }
virtual void printOn(ostream & out);
// Методы класса Home
void setName(const char *HomName , const char *Number=NULL);
const char *getName() { return (const char *)name; };
const char *getNumb() { return (const char *)Home_Number; };
int getNo() { return no; };
void getParam(int & iH, int & Etag ,int & Men ,HomeType & Type, int & Apart )
{iH = iHome; Etag = EtagCount; Men = MenCount;
Type = TypeHome; Apart = NumbApartament ; };
void setParam(int iH, int Etag ,int Men ,HomeType Type, int Apart )
{ iHome= iH; EtagCount= Etag; MenCount= Men;
TypeHome = Type; NumbApartament = Apart; };
void setAllParam(const char *HomName , const char *Number, int iH, int Etag ,
int Men ,HomeType Type, int Apart , BOOL rem = false);
// Дружественная функция для перегрузки
friend Home & operator +(Home & H1 , Home & H2);
// Свойства класса Home
public:
char *Home_Number; // Символьный номер дома
int iHome; // Номер дома числовой
int EtagCount; // Число этажей
int MenCount ; // Число жителей в доме
HomeType TypeHome ; // Тип дома
BOOL HomeRemont ; // Требуется ли ремонт дома
int NumbApartament; // Число квартир// …
};
//////////////////////
// Класс улиц
//////////////////////
// Разница для массивов и списков только здесь !!! (нужное для массивов и списков перекомментировать)
class Street: public AbstrStreet , public CObArray {
//class Street: public AbstrStreet , public CArray <CObject *, CObject * >{
///////// Для списков кроме перекомментирования нужно изменить библиотеку DZ_LIB.cpp
// class Street: public AbstrStreet , public CObList {
// class Street: public AbstrStreet , public CList<CObject *, CObject * > {
public:
Street();
Street(const char *sName);
Street(const char *sNumbSearch, const char *sName);
Street(int Num);
Street(const char *sName , int Num);
Street(Street & S);
~Street() { };
// Перегрузка присваивания
Street operator =(Street & S);
// Виртуальные методы
public:
virtual int classType(){ return StreetClass;};
virtual char *className() {return "Street";};
virtual void printOn(ostream & out);
// Свойства класса Street
// Номер улицы – тип целый
public:
char *Name_Street;
int Homes_num;
int NumberStreet;
BOOL Remont; // для всех домов
BOOL RemontStreet;
StreetType StrType;
Street * ListOfNear; // соседние улицы - резервировано
// Методы класса Улиц - Street
void add(Home *pH, TypeAddDel = tail , int Numb = 1 , TypeAddDel = createObj);
void del( TypeAddDel = tail , int Numb = 1 , TypeAddDel = nodeleteObj);
// Получить и установить параметры улицы name,, no, NumberStreet
int GetNumberHome(){return (int) GetCount() ;};
int GetNumberMens(); //
char * GetNameStreet(){ return Name_Street;};
char * GetKeyNameStreet(){ return name;};
int GetNumbStreet(){ return NumberStreet;};
int GetKeyNumbStreet(){ return no;};
void SetNameStreet(const char * NameStr);
void SetKeyNameStreet(const char * sName);
void SetNumbStreet( int n ){ NumberStreet = n; return;};
void SetKeyNumbStreet( int k){ no = k; return;};
BOOL GetRemont();
BOOL GetRemontStr(){ return RemontStreet;};
void SetRemontStr(BOOL rS){ RemontStreet = rS; return;};
StreetType GetStreetType(){ return StrType;};
void SetStreetType(StreetType t){ StrType= t; return;};
// Дружественные функции
friend Street & operator +( Street & X , Street & Y );
};
Модуль - DZ_LIB.H (для массивов)
// DZ_LIB.cpp (для DZ_Array.cpp)
// Библиотека функций и методов для варианта с массивом (DZ_Array)
#include "stdafx.h"
#include <iostream>
using namespace std;
//////////////////////////////////
#include "DZ_Class.h"
//////////////////////////////////
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;