- •Лабораторные работы по курсу «Инструментальные средства визуального программирования»
- •1. Программирование односвязного списка
- •1.1.Задание
- •1.2.Описание вариантов заданий
- •2.Перегрузка векторных и матричных операций
- •2.1.Задание
- •2.2.Бесценные методические указания
- •2.3.Некоторые особенности перегрузки операций
- •2.4.Варианты заданий
- •3.Классная работа
- •3.1.Постановка задачи
- •3.2.Задания
- •3.3.Методические наказания к первой части работы
- •3.4.Методические наказания ко второй части работы
- •4.Алгоритмы
- •Задание
- •Варианты классов и их обработки
- •5.Приложение WinForms (cli)
- •5.1.Задание
- •5.2.Бесценные методические предписания
- •Int nRec;//Число записей файла, оно же будет числом элементов массивов
- •6.Графика в WinForms (cli)
- •6.1.Задание
- •6.2.Бесценные методические предписания
- •6.3.Индивидуальные задания
- •7.1.Задание
- •7.2.Бесценные методические наставления
- •8.Квикли файдингуем рутсы
- •8.1.Дармовые методические рекомендации
- •8.2.Задание
- •Варианты индивидуальных заданий
- •9.Приложение, основанное на модальном диалоговом окне
- •9.1.Нудные методические указания Модальные и немодальные диалоговые окна
- •Ресурсы и элементы управления
- •Сценарий создания приложения
- •Разбор приложения
- •Усовершенствование приложения
- •10.Разработка графического редактора
- •Задание.
- •10.1.Проектирование программы
- •10.2.Разработка интерфейса
- •Установка флагов
- •Создание меню и панели инструментов
- •Обработка сообщений о нажатии кнопки мыши
- •10.3.Рисование
- •10.4.Растягивание фигур
- •10.5.Обновление изображения
- •10.6.Сохранение метафайла на диске и его загрузка
- •Список ссылок
- •Работы, выполненные в осеннем семестре 2016/2017 по курсу ооп
3.2.Задания
Если выражаться кратко, то вашей задачей является разработка такого приложения, на вход которого подаются два файла (например, Foo.h и Foo.cpp), а на выходе появляются тоже два файла, но в них содержится в максимальной степени доработанное описание класса, причем эти файлы могут безошибочно компилироваться.
Что же полезного можно сделать на благо неблагодарных программистов? Да вот что.
Конструктор с параметрами, инициализирующий значения член-данных класса:
CFoo::CFoo(double m_dWeight)
{
this->m_dWeight=m_dWeight;
}
Деструктор, освобождающий память, выделяемую для член-данных указателей:
CFoo::~CFoo()
{
if(Ptr) delete Ptr;
}
Конструктор копирования, который просто копирует все значения член-данных класса:
CFoo::CFoo(const CFoo & Org)
{
this->m_dWeight=Org.m_dWeight;
}
Предполагается, что программист догадается доработать этот конструктор в соответствии со спецификой конкретного класса и своим разумением назначения класса.
Так называемые аксессоры:
void CFoo::set_Weight(double Value)
{
m_dWeight=Value;
}
double CFoo::get_Weight()
{
return m_dWeight;
}
Перегруженная операция присваивания:
CFoo & CFoo::operator =(const CFoo & Obj)
{
this->m_dWeight=Obj.m_dWeight;
return *this;
}
Во всех вариантах задания предполагается неукоснительное соблюдение (англ.: neukhylne dotrymannya) следующих требований и условий:
обязательным интерфейсом программы должно быть меню «Файл» с командами «Открыть», «Сохранить», «Сохранить как» и «Выход»;
интерфейс программы (это требование относится и к сообщениям) должен быть одноязычным: украинский, английский, китайский и т.п.;
программа должна (на самом деле это вы должны обеспечить) запрашивать имена исходных файлов, например, Foo.h и Foo.cpp, а также имя класса, например, CFoo. Рекомендуется использовать класс CFileDialog. Требование нежесткое и его можно обойти, запросив, например, только имя класса и по нему определить имена файлов, а также запросив имя каталога, в котором они должны быть;
содержимое исходных файлов должно быть примерно таким, как показано на шаге 4;
по завершении работы программа должна реализовать команды меню файл «Сохранить» и «Сохранить как» с понятной даже начинающему юзеру функциональностью;
можно предполагать, что имя класса находится в файле вслед за словом class, которое должно быть первым в строке, но не в файле;
строки комментариев начинаются с символов //, могут располагаться в любом месте тела класса и должны игнорироваться, но не удаляться из выходных файлов. Не возбраняется, а даже поощряется допущение комментариев вида /* оце коментар так коментар!*/;
можно предполагать, что описание член-данных класса начинается со строки, следующей за строкой, содержащей слово private, и заканчивается строкой, в которой находится слово public или конец описания класса – фигурная скобка, сопровождаемая точкой с запятой;
идентификаторы член-данных и член-функций могут состоять из произвольного количества символов, причем разных регистров. Эти имена должны подчиняться требованиям для идентификаторов;
подобным манером можно также предполагать, что описание член-функций класса, в том числе конструктора и деструктора, начинается со строки, следующей за строкой, содержащей слово public, и заканчивается строкой, в которой находится слово private или конец описания класса;
прототипы описания аксессоров должны находиться в секции public тела класса, а их реализации – в файле .cpp. Аксессоры должны быть реализованы во всех вариантах задания без исключения. Имена аксессоров должны начинаться с префиксов set_ и get_;
член-данные массивы инициализировать (в конструкторах) не требуется, а их аксессорами должна быть перегруженная операция [] (см. класс TVector в [4]);
для член-данных указателей в деструкторе класса предусмотреть освобождение памяти с проверкой значения указателя. Деструктор должен быть реализован в любом варианте задания, где имеются член-данные указатели;
важно: если в вашем варианте задания предусмотрены, например, член-данные типов char и int, то это значит, что их может быть и несколько;
разумеется, что после обработки файлов вашей программой они должны компилироваться без ошибок.
Пример программы содержится в папке
\ISVP\Gen_exe(Классная работа).
Если вы ее запустите на выполнение,
откроете файлы Foo.h
и Foo.cpp,
выполните команду ФайлОбработка
и затем ФайлСохранить
как, то сможете
улицезреть в них
добавленные аксессоры.
Варианты заданий приведены в таблице 1. Вы должны также придумать свой собственный класс и описать его назначение, смысл член-данных.
Таблица 1.
Вариант |
Типы член-данных, для которых должны быть сгенерированы аксессоры, созданы конструкторы или перегруженная операция |
Реализуемые член-функции. Важно: если вам достался какой-либо конструктор, перегруженная операция или деструктор, то вы можете не разрабатывать аксессоры |
1 |
double, unsigned int *, float [] |
|
2 |
short int *, float*, short int [] |
Деструктор |
3 |
double *, char, short int |
Перегруженная операция присваивания |
4 |
int *, unsigned int [] |
Конструктор с параметрами |
5 |
unsigned long int [], float |
|
6 |
unsigned long int, double [],char |
|
7 |
char *, char [], int |
|
8 |
float *, __int8 |
Конструктор копирования |
9 |
long int *, double *, double |
Деструктор |
10 |
__int32, int [], boolean |
Конструктор с параметрами |
11 |
unsigned int, double [] |
Конструктор копирования |
12 |
double [], __int64 |
Перегруженная операция присваивания |
13 |
char [], __int16 |
|
14 |
boolean, short int, float |
|
Что нужно тестировать и что будет проверять вежливый преп при приеме лабы:
отсутствие ошибок компиляции как входных файлов, так и выходных;
наличие комментариев, которые вы должны ввести для каждого (или только некоторых) член-данного и каждой член-функции при их генерации с помощью мастеров ИС;
наличие во входном файле как минимум одной член-функции с параметрами. Типы формальных параметров использовать из задания, номер которого на 1 больший вашего;
сохранение работоспособности вашей программы при добавлении в исходные файлы член-данных типов, предусмотренных в вашем варианте, или еще одной член-функции. При этом допускается ручная корректировка исходных файлов, заключающаяся в перестановке строк и/или удалении лишних спецификаторов public и private. Порядок секций public и private в исходном заголовочном файле может быть любой. Сие значит, что если вы отладили программулину для случая, когда секция public идет вначале, то вежливый преп обязательно проверит работоспособность вашей программушки для случая, когда секция public будет идти второй, т.е. после private;
вполне возможно, что в заголовочном файле может быть произвольное количество член-данных одного типа, указанного в вашем варианте задания. При этом не исключено наличие член-данных других типов.
