Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ISVP_Labs_16_17.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.55 Mб
Скачать

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;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]