Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Шаг 2. Доработайте и тестируйте полученное приложение.




Запустите приложение на выполнение с помощью команды F5, чтобы убедиться в том, что приложение – пока вы не начали его усовершенствовать – еще работоспособно.

Найдите в проекте файл, в котором описана функция InitInstance(), и вставьте перед оператором m_pMainWnd->ShowWindow(SW_SHOW); приведенный ниже код, который позволяет несколько украсить свое приложение и придать ему некоторую неповторимость.

 

 
 

Опять запустите приложение на выполнение – работает?!

Шаг 3. Добавим в проект класс. С помощью команды меню ProjectèAdd Class добавьте в проект обычный С++ класс. Например, если мы дадим классу имя CFoo, то получим два файла с таким содержимым:

файл Foo.h #pragma once class CFoo { public: CFoo(void); ~CFoo(void); };
файл Foo.cpp #include "StdAfx.h" #include "Foo.h" CFoo::CFoo(void) { } CFoo::~CFoo(void) { }

Далее вызовем окно ClassView (Ctrl+Shift+C), выберем в нем класс CFoo, вызовем для него контекстное меню и обнаружим там, в частности, команды AddèAdd Function и AddèAdd Variable. Нашли? Пользуясь этими командами, можно довести наш класс до такого, например, вида:

файл Foo.h #pragma once // Этот замечательный класс предназначен для моделирования // поведения чупакабры class CFoo { public: CFoo(void); ~CFoo(void); // SmartMethod возвращает значение true, если чупакабра с именем // Name съела не меньше Count собак virtual bool SmartMethod(int Count, char * Name); private: // вес чупакабры до ужина [кг] double m_dWeight; };
файл Foo.cpp #include "StdAfx.h" #include "Foo.h" CFoo::CFoo(void) : m_dWeight(0) { } CFoo::~CFoo(void) { } // SmartMethod возвращает значение true, если чупакабра // с именем Name съела не меньше Count собак bool CFoo::SmartMethod(int Count, char * Name) { return false; }

 

Хочу обратить ваше внимание на следующие возможности мастеров ИС:

Ø при добавлении переменной можно указать в комментарии ее назначение и спецификатор доступа. Кроме того, мастер добавляет инициализацию этой переменной в конструктор класса;

Ø при добавлении функции можно указать произвольное число параметров (потренируйтесь!). Мастер генерирует не только прототип функции, но и ее «реализацию», причем при нужде добавляется и оператор return.

 

Как видно из приведенного примера, мастера ИС выполняют за программиста черновую работу, причем, заметьте, и даром, и безошибочно! Но, конечно, ничто не совершенно в этом мире и вам предоставляется счастливый случай исправить эти недостатки мастеров ИС.

 

Задания

Если выражаться кратко, то вашей задачей является разработка такого приложения, на вход которого подаются два файла (например, 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, то это значит, что их может быть и несколько;

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

 

 

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

Таблица 1.

Вариант Типы член-данных, для которых должны быть сгенерированы аксессоры, созданы конструкторы или перегруженная операция Реализуемые член-функции. Важно: если вам достался какой-либо конструктор, перегруженная операция или деструктор, то вы можете не разрабатывать аксессоры
  double, unsigned int *, float []  
  short int *, float*, short int [] Деструктор
  double *, char, short int Перегруженная операция присваивания
  int *, unsigned int [] Конструктор с параметрами
  unsigned long int [], float  
  unsigned long int, double [],char  
  char *, char [], int  
  float *, __int8 Конструктор копирования
  long int *, double *, double Деструктор
  __int32, int [], boolean Конструктор с параметрами
  unsigned int, double [] Конструктор копирования
  double [], __int64 Перегруженная операция присваивания
  char [], __int16  
  boolean, short int, float  

 

Что нужно тестировать и что будет проверять вежливый преп при приеме лабы:

Ø отсутствие ошибок компиляции как входных файлов, так и выходных;

Ø наличие комментариев, которые вы должны ввести для каждого (или только некоторых) член-данного и каждой член-функции при их генерации с помощью мастеров ИС;

Ø наличие во входном файле как минимум одной член-функции с параметрами. Типы формальных параметров использовать из задания, номер которого на 1 больший вашего;

Ø сохранение работоспособности вашей программы при добавлении в исходные файлы член-данных типов, предусмотренных в вашем варианте, или еще одной член-функции. При этом допускается ручная корректировка исходных файлов, заключающаяся в перестановке строк и/или удалении лишних спецификаторов public и private. Порядок секций public и private в исходном заголовочном файле может быть любой. Сие значит, что если вы отладили программулину для случая, когда секция public идет вначале, то вежливый преп обязательно проверит работоспособность вашей программушки для случая, когда секция public будет идти второй, т.е. после private;

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...