МУ_ДЗ_2014 (Методические указания к лабораторным работам), страница 12

2018-01-11СтудИзба

Описание файла

Файл "МУ_ДЗ_2014" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.

Онлайн просмотр документа "МУ_ДЗ_2014"

Текст 12 страницы из документа "МУ_ДЗ_2014"

// Абстрактный класс для дома

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;};

int Street::GetNumberApart();

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 );

};

В приложении к данным МУ приведены документы, в которых дано подробное техническое описание для нашего примера.

53 Обязательные требования к ПО КЛР/ДЗ

Приведенные ниже требования являются обязательными для выполнения в рамках ДЗ/КЛР. Для сдачи заданий и получения хорошей отметки они должны быть выполнены.

При выполнении задания должны быть обязательно учтены следующие требования:

  1. Студент разрабатывает систему классов, демонстрационный пример ее использования и комплект документации на программный продукт индивидуально. Должна быть разработана диаграмма классов.

Пример. Система классов улиц и домов. Полный комплект документации, включая ТЗ и ПМИ (см. ниже). Демонстрационный пример для проверки работы системы классов на основе ПМИ. При отладке программ классов может быть использован отдельный пример для отладка.

  1. Студентом должны быть разработаны, по крайней мере, три новых класса, отличных от стандартных классов систем программирования. Имена классов должны быть понятными и легко запоминаться.

Пример. Два класса дом и улица уже есть. Третий класс может быть определен как абстрактный класс для строений или улиц, для того чтобы иметь возможность развития классов: строения могут быть не только жилыми домами, но и магазинами, учреждениями и т.д. Стандартные классы используются для контейнеров (массивы и списки), а также для формирования свойств виртуальности – базовый объект (Например, CObject).

  1. Для классов объектов явно определяются и разрабатываются: конструкторы (не менее трех для каждого класса) и деструкторы (для каждого класса). Кроме этого, перегружается оператор присваивания, и создается конструктор копирования.

Пример. Конструкторы могут с первоначальным заданием параметров или нет, например, с заданием названия улицы, номера дома и т.д.

  1. В каждом классе помимо конструкторов и деструкторов должно быть определено не менее пяти методов (функций членов класса), а также не менее пяти индивидуальных свойств разных типов(данных класса). Обязательно должны быть реализованы типы: int, double, char массив (строка). В дополнение к ним могут быть заданы типы стандартной библиотеки.

Пример. Методы для улиц могут быть такими: добавление дома, удаление дома, распечатки домов улицы, нумерация домов, сложение улиц, деление улиц и т.д. Например, деление улицы на две может интерпретироваться так: первые N домов переносятся на "улицу Горького", а остальные на "Тверскую". Т.е., другими словами, из одного объекта мы получаем два других объекта с определенными свойствами. Разрабатывая такую операцию нужно продумать вопросы: где создаются новые объекты, как они заполняться, уничтожается ли исходный объект и т.д.

  1. Должны быть продемонстрированы механизмы наследования классов, как минимум один класс должен быть базовым, а другой производным. Для класса контейнера (список или массив) наследование выполняется от стандартного контейнерного класса, заданного вариантом (список или массив). Должен быть продемонстрирован механизм множественного наследования.

Пример. Наследование, если это не определяются по-другому характером задачи желательно сделать также от абстрактного класса. Например, для дома или улицы.

  1. Для элементного класса должна перегружаться операция “+”, в алгоритм функции перегрузки которой, закладывается, по возможности, оригинальный и конкретный смысл.

Пример. Операция сложения двух домов, например, при выполнении новой нумерации улицы или дополнительных построек домов (дом 2 строение 3.).

  1. В одном из своих классов, по выбору, должны быть реализованы скрытые методы и данные (private). Доступ к этим данным и методам должен быть выполнен только с помощью открытого метода класса и продемонстрирован на примере.

Пример. Доступ к вычисляемому признаку ремонта домов улицы (скрытому) и метода расчета признака ремонта может быть выполнен отдельным методом.

  1. В одном классе по выбору определяется как минимум одна чистая виртуальная функция (это предопределяет использование одного абстрактного класса) и демонстрируется ее переопределение в других классах, для этого может быть создан дополнительный класс (типа Object).

Пример. Чистые виртуальные функции задаются в абстрактном классе и переопределяются в производных классах. Например, функция печати объекта на cout (например - printOn).

  1. Один из разрабатываемых классов должен быть контейнерного типа (массив, список, множество и т.д.), в нем должны быть определены операции добавления, удаления, распечатки из контейнера и др. Учитываются дополнительные требования к данному классу, которые выделены в вариантах задания. Контейнерные свойства класса наследуются от стандартных контейнерных классов по варианту группы (список, массив). Операции с контейнерным классом реализуются на основе методов и свойств базового класса. Допускается реализация собственных дополнительных базовых контейнерных классов (списки, массивы и т.д.), при этом они реализуются без наследования от классов стандартных библиотек.

Пример. В контейнерном классе улица предусматриваются операции добавления домов, их удаления, печати всех домов улицы и т.д. Например, для определения числа объектов в контейнере для класса CArray может быть использован метод GetCount. Возможна собственная реализация классов список или массив.

  1. В контейнерном классе, в зависимости от варианта, задается как минимум одна перегружаемая операция (обязательная операция, обозначенная знаком по варианту группы). Операция должна иметь внятный смысл и быть продемонстрирована на примере.

Пример. В нашем случае лучше определить операцию сложения двух улиц или операцию добавления дома на улицу. В первом случае это может выглядеть так:

Оператор присваивания сложения улиц: Street3 = Street1+ Street2;

а во втором простое выражение присваивания: Street1+Home1;

  1. Отладка системы классов может быть выполнена с помощью отладочного примера, созданного в произвольной форме, однако предпочтительней является вариант с переключателем и отдельными блоками для проверки методов и свойств классов (конструкторы, методы, операции).

Пример. В приложении к данным МУ можно посмотреть такой пример (Закомментированная функция mainDEBUG()).

  1. Для сдачи работы, должен быть разработан, описан в документе и представлен специальный демонстрационный (тестовый) пример, иллюстрирующий работу всех возможностей разработанной системы классов (свойств и методов/функций членов). Он является основой для демонстрации и сдачи домашнего задания (в соответствии с пунктами ТЗ и ПИМ – программой и методикой испытаний). Все пункты ТЗ (раздел 5.1) должны проверяться в тестовом примере. Можно использовать переключатель для обеспечения выборочной проверки пунктов ТЗ.

Пример. В демонстрационном примере (mainMETOD()) должны быть показано использование всех классов, на основе определения объектов и работу всех методов этих классов. Выполнение всех пунктов ТЗ. Он строится на основе консольного меню и переключателя. Например, для классов улиц: создание улиц статическое и динамическое через операцию new, уничтожение улиц через операцию delete, добавление домов на улицу, их удаление, распечатку домов, слияние улиц и т.д.

  1. Описания классов и их методы должны быть вынесены в отдельные файлы проекта (*.cpp, *.h или *.hpp). При этом необходимо исключить повторное включение описаний в исходный текст. Проектирование модульной структуры и распределение описаний по модулям выполняется в начале работы над домашним заданием.

Пример. Например, с помощью переменных этапа компиляции (define __STREET_H):

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
430
Средний доход
с одного платного файла
Обучение Подробнее