Руководство пользователя _РП_2014 (Методические указания к лабораторным работам), страница 2
Описание файла
Файл "Руководство пользователя _РП_2014" внутри архива находится в следующих папках: Методические указания к лабораторным работам, ЛР_14_КЛР_ПКШ. PDF-файл из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Конструкторы класса HomeВ классе Home описаны следующие конструкторы:№ п/п1.2.ПрототипHome()Home( Home & H)Тип возвратаHome &Home &3.Home( Home * pH)Home &4.Home(const char *HomName, const char *Number)Home &5.Home(const char *HomName, const char *Number, intNumb)Home &6.Home(const char *HomName, const char *Number, intNumb, int Etag, int Men=0,HomeType Type = fast,intApart=0)Home &Назначение /ПараметрыНетНовый на основе ссылкина объект типа дом:Home &Новый на основеуказателя на объект типадом:Home *Новый с параметрами:HomName - имяNumber - номер домаНовый с параметрами:HomName - имя дома,Number - номер домаNumb - номер для поискаНовый с параметрами:HomName - имя дома,Number - номер домаNumb - номер для поиска,Etag - этажность,Men - число жителей,Type – тип дома,Apart - число квартирПримеры использования конструкторов:Конструктор без параметров:Home H1;Конструктор с именем и номером символьным:Home H2("Жилой","д.2");Конструктор с именем, номером символьным и номером для поиска:Home H3("Жилой", "д.3", 3);Конструктор с именем, номером символьным, номером для поиска и этажностью:Home H4("Жилой", "д.4а", 4,2);Конструктор с именем, номером символьным, номером для поиска, этажностью ичислом жителей:Home H5("ДЭЗ", "д.5", 5,2,3);Конструктор с именем, номером символьным, номером для поиска, этажностью,числом жителей и типом дома:Home H6("Жилой", "д.6", 6,2,3, fast);Конструктор с именем, номером символьным, номером для поиска, этажностью,числом жителей, типом дома и числом квартир:Home H7("Магазин", "д.7", 7,2,3, multiple , 5);Примеры использования конструкторов копирования:Конструктор копирования на основе ссылки:Home H6("ДЭЗ", "д.5", 5,2,3);Home Test(H5);H5.printOn(cout);Test.printOn(cout);Конструктор копирования на основе ссылки и динамической памяти:Home *pHome = new Home (H6);H6.printOn(cout);67pHome->printOn(cout);delete pHome;Конструктор копирования на основе ссылки и операции присваивания “-”:Home Temp;Home H7("Магазин", "д.7", 7,2,3, multiple , 5);Temp = H7;H7.printOn(cout);Temp.printOn(cout);Конструктор копирования на основе указателя и динамической памяти:Home H6("ДЭЗ", "д.5", 5,2,3);Home *pHome = new Home (H6);Home *pHome1 = new Home (* pHome);pHome->printOn(cout);pHome1->printOn(cout);delete pHome;delete pHome1;4.3.
Деструктор класса HomeПрототип деструктора:~Home();Пример явного и неявного использования деструктора:{Home *pHome = new Home (H6);pHome->printOn(cout);delete pHome;}Неявный вызов деструктора производится при завершении блока операторов . Явныйвызов деструктора производится при выполнении операции delete.4.4. Методы класса HomeВ таблице представлены методы класса Home.Типвозвратаvoid№ п/пПрототип1.void setName(const char *HomName , constchar *Number=NULL)2.const char *getName()const char *3.const char *getNumb()const char *4.int getNo()int5.void getParam(int & iH, int & Etag ,int &Men ,HomeType & Type, int & Apart )voidНазначениеУстановитьимя дома иномер домаПолучитьимя домаПолучитьномер домаПолучитьномер домадля поискаПолучитьпараметрыдомаПараметрыHomName - имя дома иNumber - номер домаНетНетНетiH -номер дома,Etag - этажность,Men - число жителей,Type – тип (значение типадома выбирается изнабора перечисленияHomeType см.
выше),Apart - число квартир78№ п/пПрототипТипвозвратаvoidНазначение6.void setParam(int iH, int Etag ,int Men,HomeType Type, int Apart )Задатьновыепараметрыдома7.void setAllParam(const char *HomName ,const char *Number, int iH, int Etag , intMen ,HomeType Type, int Apart , BOOLrem = false)voidЗадать всеновыепараметрыдома8.virtual void printOn(ostream & out)voidПечать встандартныйпотокПараметрыiH -номер дома,Etag - этажность,Men - число жителей,Type – тип (значение типадома выбирается изнабора перечисленияHomeType см.
выше),Apart - число квартирHomName - имя дома,Number - имя дома дляпоискаiH -номер дома,Etag - этажность,Men - число жителей,Type – тип (значение типадома выбирается изнабора перечисленияHomeType см. выше),Apart - число квартирrem -признак ремонтаOut – тип ostreamПримеры использования методов класса Home:Установка имени дома символьного:Temp.setName("Университет");Temp.printOn(cout);Установка имени и номера дома символьного:Temp.setName("Магазин" ,"д.11/12");Temp.printOn(cout);Получение имени и номера дома символьного:cout << "Name дома = "<< Temp.getName() << endl;Получение номера дома символьного:cout << "Номер дома = "<< Temp.getNumb() << endl;Получение номера дома для поиска:cout << "Номер в списке = "<< Temp.getNo() << endl;Получение параметров дома:cout << "Параметры: "<< endl;int iH, Etag , Men , Apart ;HomeType Type;Temp.getParam(iH , Etag, Men, Type , Apart);cout << "Номер -" << iH <<" Этажей -" << Etag << " Жителей -" << Men << endl;if (Type == fast)cout << "Тип дома - простой ";if (Type == multiple)cout << "Тип дома - много строений ";if (Type == complex)cout << "Тип дома - сложный ";cout << " Число квартир - " << Apart << endl;89Установка параметров дома:Temp.setParam(1,2,3,fast, 5 );Temp.printOn(cout);Установка всех параметров дома:Temp.setAllParam("Аптека", "10/8 кв.3", 11,12,13,fast, 15, true );Temp.printOn(cout);4.5.
Операции класса HomeПрототип перегруженного оператора присваивания:Home operator =(Home & H );Пример использования перегруженного оператора присваивания:Home Temp;Home H7("Магазин", "д.7", 7,2,3, multiple , 5);Temp = H7;H7.printOn(cout);Temp.printOn(cout);4.6. Дружественные функции класса HomeПрототип перегруженного оператора сложения:friend Home & operator +(Home & H1 , Home & H2)Пример использования перегруженного оператора сложения:Home H1("Жилой", "д.6", 6,2,3, fast , 3);Home H2("Жилой", "д.7", 9,10,11, fast , 5);Home Temp;Temp = H1 + H2;H1.printOn(cout);H2.printOn(cout);Temp.printOn(cout);При сложении двух домов суммируются: число квартир, число жителей, имена домов,устанавливается признак ремонта по логике “ИЛИ”.
Этажность определяется по числуэтажей первого дома. Тип дома задается как сложный (complex).5. КЛАСС Улиц - StreetКласс Street. Улица – объекты данного типа в упорядоченном виде содержатинформацию о домах улице, названии улицы, типе улицы, соседних улицах (как резерв),необходимости ремонта улицы, числе домов, номера улицы (как резерв). Предусматриваетсявозможность добавления домов на улицу и их удаления, изменения других параметровулицы.5.1. Данные и переменные класса StreetВ таблице приведены свойства класса улиц (Street).НазваниеТип свойстваЗащитаchar *Name_Street;int NumberStreet;int Homes_num;BOOL Remont;char *intintBOOLpublicpublicpublicpublicBOOL RemontStreet;BOOLpublicНазначениеНазвание улицыНомер улицыЧисло домов на улицеПризнак необходимости ремонтадомов улицыПризнак ремонта самой улицы910НазваниеТип свойстваЗащитаStreetType StrType;StreetTypepublicStreet * ListOfNear;Street *publicНазначениеТип улицы: one (односторонняя), two(два направления) , more (многополос)Список соседних улиц( зарезервировано)5.2.
Конструкторы класса StreetНиже в таблице приведен список конструкторов класса Street.№ п/п1.2.ПрототипStreet();Street(const char *sName);Тип возвратаStreet &Street &3.Street(const char *sNumbSearch, const char *sName);Street &4.Street(int Num);Street &5.Street(const char *sName , int Num);Street &6.Street(Street & S);Street &Назначение /ПараметрыНетСоздание улицы сназваниемСоздание улицы сназванием и именем дляпоискаСоздание улицы сномеромСоздание улицы сименем и номеромСоздание улицы наоснове другой (наоснове ссылки)Примеры конструкторов класса Street:Конструктор без параметров:Street S1;Конструктор с именем улицы:Street S2("Лениский проспект");Конструктор с именем улицы и именем для поиска:Street S3("Ленин","Лениский проспект");Конструктор с номером улицы для поиска:Street S4(5);Конструктор с именем улицы и номером для поиска:Street S5("Горького ул." , 7);Конструктор копирования на основе ссылки на объект:Home H2("Жилой","д.2", 7,2,3, fast , 5);Home H3("Магазин", "д.3", 3);Home H4("ДЭЗ", "д.4а", 4,2);Street SNew("Улица" , 15);SNew.add(&H2);SNew.add(&H3);SNew.add(&H4);SNew.printOn(cout);Street SCopy(SNew);SCopy.printOn(cout);5.3.
Деструктор класса StreetПрототип деструктора улицы:~Street();1011Пример явного и неявного использования деструктора:{Street *pStreet = new Street (S1);pStreet ->printOn(cout);delete pStreet;}Неявный вызов деструктора производится при завершении блока операторов. Явныйвызов деструктора производится при выполнении операции delete.5.4. Методы класса Street№ п/пПрототип1.void add(Home *pH, TypeAddDel T= tail ,int Numb = 1 , TypeAddDel TC = createObj);2.void del(Home *pH , TypeAddDel T= tail ,int Numb = 1 , TypeAddDel TD=nodeleteObj);3.ТипвозвратаvoidНазначениеПараметрыДобавление домана улицуpH - указатель надомT - куда добавить(head, tail, Number),TC - создавать линовый (createObj,nocreateObj )voidУдаления дома сулицыpH - указатель надом куда выбираетсяT - куда добавить(head, tail, Number),TD - удалять лиобъект (deleteObj,nodeleteObj)virtual void printOn(ostream & out);voidout - ostreamстандартный поток4.int GetNumberHome();int5.int GetNumberMens();int6.int GetNumberApart();int7.char * GetNameStreet();char *8.char * GetKeyNameStreet();char *9.int10.int GetNumbStreet(){ returnNumberStreet;};int GetKeyNumbStreet();int11.void SetNameStreet(const char * NameStr);void12.void SetKeyNameStreet(const char *sName);void13.void SetNumbStreet( int n );void14.void SetKeyNumbStreet( int n);voidПечать объектаулицы встандартныйпотокПолучить числодомов на улицеПолучить числожителей наулицеПолучить числоквартир на улицеПолучитьназвание улицыПолучить номердомасимвольныйПолучить номердома числовойПолучить номердома числовойдля поискаУстановитьназвание улицыУстановить имяулицы дляпоискаУстановитьномер улицыУстановитьномер улицы дляпоисканетнетнетнетнетнетнетNameStr - имя улицыsName - имя улицыдля поискаn - номер улицыn - номер улицы дляпоиска111215.BOOL GetRemont();ТипвозвратаBOOL16.BOOL GetRemontStr();BOOL17.void SetRemontStr(BOOL rS) ;void18.StreetType GetStreetType();StreetType19.void SetStreetType(StreetType t);void№ п/пПрототипНазначениеПолучитьпризнак ремонтадомов на улицеПолучитьпризнак ремонтаулицыУстановитьпризнак ремонтаулицы (false,true)Получить типулицы: one(односторонняя),two (дванаправления) ,more (многополос)Установить типулицыПараметрынетнетrS - признак ремонтаулицынетt – новый тип улицы:one, two , moreПримеры использования методов класса Street:Добавление домов на улицу в начало:Home H2("Жилой","д.2", 7,2,3, fast , 5);Home H3("Магазин", "д.3", 3);Home H4("ДЭЗ", "д.4а", 4,2);Street Astreet("Добавление head", 20);Astreet.printOn(cout);cout << endl << "******* Добавление head *********" << endl;Astreet.add(&H2 , head);Astreet.add(&H3 , head);Astreet.add(&H4 , head);Astreet.printOn(cout);Добавление домов на улицу в конец списка:Home H5("Жилой","д.2", 7,2,3, fast , 5);Home H6("Магазин", "д.3", 3);Home H7("ДЭЗ", "д.4а", 4,2);cout << endl << "******* Добавление tail *********" << endl;Street Dstreet("Добавление tail ", 20);Dstreet.add(&H5 , tail);Dstreet.add(&H6 , tail);Dstreet.add(&H7 , tail);Dstreet.printOn(cout);Добавление домов на улицу по номеру (второго):cout << endl << "******* Добавление NUM 2 *********" << endl;Home H8("Жилой 3","д.2", 70,20,30, fast , 50);Home H9("Магазин 3", "д.3", 3);Home H10("ДЭЗ 3", "д.4а", 4,2);Dstreet.add(&H8 , Number, 2);Dstreet.add(&H9 , Number, 2);Dstreet.add(&H10 , Number, 2);Dstreet.printOn(cout);Удаление домов с улицы (с конца):cout << endl << "******* Удаление *********" << endl;Dstreet.del(&H8);1213Удаление домов с улицы (с начала):Dstreet.printOn(cout);Dstreet.del(&H8 , head);Dstreet.printOn(cout);Удаление домов с улицы (по номеру - второго):Dstreet.del(&H8 , Number, 2);Dstreet.printOn(cout);Получение параметров улицы:cout <<cout <<cout <<cout <<cout <<cout <<cout <<cout <<"******* Параметры *********" << endl;"Название улицы -> " << Sumstreet.GetNameStreet() << endl;"Номер улицы -> " << Sumstreet.GetNumbStreet() << endl;"Название улицы для поиска-> " << Sumstreet.GetKeyNameStreet() << endl;"Номер улицы для поиска-> " << Sumstreet.GetKeyNumbStreet() << endl;"Число домов на улице = " << Sumstreet.GetNumberHome() << endl;"Число жителей на улице = " << Sumstreet.GetNumberMens() << endl;"Число квартир на улице = " << Sumstreet.GetNumberApart() << endl;Получение признака ремонта домов улицы:if ( Sumstreet.GetRemont() )cout << "На улице нужен ремонт домов!" << endl;elsecout << "На улице нужен ремонт домов!" << endl;if ( Sumstreet.GetStreetType() == one )cout << "Тип улицы -> одностороннее движение" << endl;if ( Sumstreet.GetStreetType() == two )cout << "Тип улицы -> двухсторонне движение" << endl;Задание параметров улицы:cout << "******* Изменения параметров *********" << endl;Sumstreet.SetNameStreet("Новая");Sumstreet.SetKeyNameStreet("Новая ключ");Sumstreet.SetNumbStreet( 33 );Sumstreet.SetKeyNumbStreet( 77 );cout << "Название улицы 2-> " << Sumstreet.GetNameStreet() << endl;cout << "Номер улицы 2-> " << Sumstreet.GetNumbStreet() << endl;cout << "Название улицы для поиска 2-> " << Sumstreet.GetKeyNameStreet() << endl;cout << "Номер улицы для поиска 2-> " << Sumstreet.GetKeyNumbStreet() << endl;Sumstreet.printOn(cout);};5.5.