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

5.3.Драгоценные методические указания

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

Шаг 2. Добавление в проект заготовки собственного класса. Выберите для своего класса имя в соответствии с его функциональностью, т.е. с вашим вариантом задания. Рекомендуется имя класса начинать с буквы С. Предположим, что вы назвали класс CMyCls. Выполните команду ProjectAdd Class и в появившемся окне (рис.2.1) выберите С++ в ветви Visual C++, врежьте по Add.

Рис. 2.1. Окно добавления нового класса в проект

В новом появившемся окне (рис. 2.2) введите имя своего класса в поле Class name. Обратите внимание, что по умолчанию MVS генерирует имена файлов MyCls.h и MyCls.cpp (заголовочный файл и файл реализации) путем отбрасывания первого символа имени класса. Если хотите запутать себя и возможных читателей текста вашей программы – измените имена файлов, а если нет – придавите кнопку Finish.

Рис. 2.2. Ввод имени файла

Мастер ИС сгенерирует и включит в состав проекта два файла.

Заголовочный файл MyCls.h

#pragma once

class CMyCls

{

public:

CMyCls(void);

~CMyCls(void);

};

содержит только директиву препроцессора #pragma once, предотвращающую ошибки компиляции (точнее, ошибки сборки приложения) при повторном включении этого файла в проект, и объявления конструктора и деструктора класса. В этот файл вы будете добавлять описания член-данных и член-функций классов в соответствии со своим любимым вариантом задания.

Файл реализации MyCls.cpp

#include "StdAfx.h"

#include "MyCls.h"

CMyCls::CMyCls(void)

{

}

CMyCls::~CMyCls(void)

{

}

содержит минимально необходимые директивы препроцессора и заготовки конструктора и деструктора. Если в дальнейшем вам понадобится включать в этот файл другие директивы препроцессора – добавляйте их после директивы #include "MyCls.h".

Шаг 3. Создание объекта класса. Несмотря на то, что класс добавлен в проект, мы не сможем создать и использовать ни одного объекта этого класса, пока не подключим файл MyCls.h к тому файлу приложения, в котором мы намереваемся создавать объекты этого гениального класса. Для нашего случая консольного приложения таким файлом будет SmpCL.cpp, в котором находится функция _tmain().

Добавим в этот файл директиву:

// SmpCL.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "SmpCL.h"

#include "MyCls.h" // добавление

В этом же файле в функцию _tmain() добавим определение объекта класса:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0;

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

_tprintf(_T("Fatal Error: MFC initialization failed\n"));

nRetCode = 1;

}

else

{

CMyCls obj;

getchar();

}

return nRetCode;

}

Для того чтобы убедиться в том, что объект класса действительно создается и уничтожается, поставьте точки прерывания в конструкторе и деструкторе своего класса и выполните трассировку программы. Заметили, когда вызываются конструктор и деструктор?

Проделайте подобные операции для случая, когда объект класса создается в динамической памяти:

{

CMyCls *pobj;

pobj=new CMyCls;

delete pobj;

getchar();

}

Шаг 4. Добавление в класс член-данных и член-функций. Это действо можно выполнить как «вручную», так и с помощью мастера ИС. Рассмотрим последний случай.

Выполните команду ViewClass View (рис. 2.3), в появившемся окне щелкните знак + слева от имени проекта и, о чудо!, вы увидите имя своего класса. Щелкните ЛКМ по имени своего класса и в нижней части окна вы увидите компоненты класса, в данном случае только конструктор и деструктор.

Рис. 2.3. Вкладка Class View в окне решений

Для добавления в класс член-данного выделите имя класса мышкой и вызовите для него контекстное меню (как обычно, с помощью ПКМ). В этом меню последовательно выберите команду Add и далее Add Variable. В появившемся окне (рис.2.4) выберите protected в списке Access, тип член-данного в поле Variable type, задайте имя переменной в поле Variable name и комментарий к ней в поле Comment. Вытрите пот со лба и давите Finish!

Рис. 2.4. Добавление в класс член-данного

Заметьте, что в нижней части окна Class View появилось имя член-данного и перед ним желтый значок ключика (что бы это значило?). При этом содержимое файла MyCls.h стало таким:

#pragma once

class CMyCls

{

public:

CMyCls(void);

~CMyCls(void);

protected:

// число кроликов на кв. метр

int RabbitCount;

};

Чудесным образом изменился и файл MyCls.cpp:

#include "StdAfx.h"

#include "MyCls.h"

CMyCls::CMyCls(void)

: RabbitCount(0)

{

}

CMyCls::~CMyCls(void)

{

}

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

Аналогично добавлению член-данного добавим функцию, которая позволит получить значение этого член-данного (рис. 2.5) и записать его (рис. 2.6).

Важное замечание: когда будете создавать функцию записи значения член-данного, не забудьте нажать кнопку Add после ввода имени формального параметра. Обратите внимание, что после этого действа тип и имя формального параметра появятся в окошке Parameter list (рис. 2.6) как черт из коробочки.

Рис. 2.5. Добавление функции чтения член-данного

Рис. 2.6. Добавление функции записи значения член-данного

К сожалению, мастер ИС MVS не может догадаться, какой код надо поместить в созданные им заготовки функций, и поэтому нам придется сделать это вручную, например, так:

int CMyCls::get_RabbitCount(void)

{

return RabbitCount;

}

bool CMyCls::set_RabbitCount(int newValue)

{

if(newValue<0) return false;

RabbitCount=newValue;

return true;

}

Вы можете полюбоваться диаграммой своего класса (а в дальнейшем диаграммой иерархии классов) в стиле языка UML, если для заголовочного файла MyCls.h вызовете контекстное меню и в нем приведете в исполнение команду View Class Diagram (рис. 2.7).

Рис. 2.7. Диаграмма класса CMyCls

Для настройки интерфейса консольного приложения и получения текущей даты можно воспользоваться следующим нехитрым кодом:

setlocale(LC_ALL,"rus");

system("color 1e"); system("cls");

system("date /T"); system("time /T");

system("ver");

cout<<endl;

CTime theTime = CTime::GetCurrentTime();

cout<<"Текущая дата: "<<theTime.GetDay()<<'/'<<theTime.GetMonth()<<'/'

<<theTime.GetYear()<<endl;

char *DayNames[]={"Вс","Пн","Вт","Ср","Чт","Пт","Сб"};

cout<<"День недели:"<<DayNames[theTime.GetDayOfWeek()-1]<<endl<<endl;

Шаг 5. Разработка собственного класса. Наконец-то вы можете заняться реализацией собственного класса в соответствии с вашим счастливым случаем. Желаю чтобы удача повернулась к вам приличной частью тела.

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