ООП_Лабораторный практикум
.pdfMessageBox("Say Hello");
///Здесь заканчивается ваш код///
}
Функция MessageBox("Say Hello"); вызывает окно сообщений, в котором написан текст Say Hello, который и является параметром этой функции.
Функция MessageBox() может принимать три параметра. Первый - это сами сообщение, второй – заголовок сообщения, третий – комбинация флагов (см. табл. 1.1,1.2,1.3).
Таблица 1.1. Комбинация кнопок MESSAGEBOX()
|
ID |
|
|
Кнопки |
|||
|
MB_ABORTRETRYIGNORE |
Abort, Retry, Ignore |
|||||
|
MB_OK |
|
|
OK |
|||
|
MB_OKCANCEL |
|
|
OK, Cancel |
|||
|
MB_RETRYCANCEL |
|
|
Retry, Cancel |
|||
|
MB_YESNO Yes, No |
|
|
Yes, No |
|||
|
MB_YESNOCANCEL |
|
|
Yes, No, Cancel |
|||
Таблица 1.2. Иконки MESSAGEBOX(). |
|||||||
|
|
|
|
|
|
|
|
|
ID |
|
Иконки |
||||
|
MB_ICONINFORMATION |
|
Informational icon |
|
|
||
|
MB_ICONQUESTION |
|
Question mark icon |
|
|
||
|
MB_ICONSTOP |
|
Stop sign icon |
|
|
||
|
MB_ICONEXCLAMATION |
Exclamation mark icon |
|
|
|||
Таблица 1.3. Значения, возвращаемые MESSAGEBOX(). |
|||||||
|
|
|
|
|
|||
|
ID |
|
Ответ после нажатия |
||||
|
IDABORT |
|
Abort |
|
|||
|
IDRETRY |
|
Retry |
|
|||
|
IDIGNORE |
|
Ignore |
|
|||
|
IDYES |
|
Yes |
|
|||
|
IDNO |
|
No |
|
|||
|
IDOK |
|
OK |
|
|||
|
IDCANCEL |
|
Cancel |
|
|||
Итак, вы связали кнопки Say Hello и EXIT с событием BN_CLICKED. При нажатии на кнопку Exit программа завершается, а при нажатии на кнопку Say Hello выводится сообщение
"Say Hello".
Теперь вам осталось построить и выполнить программу.
4. Построение и выполнение программы
Для того, чтобы выполнить программу надо ее вначале сохранить. Зайдите в меню File и там нажмите на Save All.
Затем надо ее построить(скомпилировать). Зайдите в меню Build->Build Hello.exe, начнется построение программы (рис.1.15). Если компилятор не выдал сообщение об ошибке, которые можно посмотреть в появившемся внизу окошке, то можно смело запускать
11
программу.
Рис. 1.15. Компиляция программы.
Теперь вам осталось только выполнить программу, для этого зайдите в меню
Build->Execute hello_world.exe
Упражнение 1. Необходимо вставить еще одну кнопку с названием Beep c итендификатором IDC_BEEP_BUTTON, при нажатии на которую компьютер подает сигнал через диамик компьютера. Функция для подачи сигнала - MessageBeep((WORD)-2);
Упражнение 2. Необходимо вставить ещё одну кнопку, на нажатие которой появляется сообщение вида:
а) б)
в) |
г) |
д) |
е) |
12
ж) |
з) |
Часть 2. Среда разработки Microsoft Visual C++ 6.0. Создание простейшей консольной программы.
1.Создание нового проекта
Сначала запустите Visual C++. Затем проделайте перечисленные ниже действия.
1)Выберите команду верхнего меню File→New.
2)Перейдите на закладку Projects.
3)Выберите проект типа Win32 Console application.
4)В строке Location укажите папку диска C:\, имя которой совпадает с вашей папкой
(например, "C:\work\Ivanov"). В строке Project Name введите "hello_world_console". По умолчанию Visual C++ сделает новую папку проекта C:\work\Ivanov\hello_world_console.
В ней будут сохраняться все файлы, относящиеся к данному проекту.
5)По умолчанию в качестве целевой платформы проекта указывается Win32. Не изменяйте этот параметр.
6)Нажмите кнопки OK, FINISH, OK.
2.Добавление в проект нового исходного файла
Чтобы включить в проект исходный текст программы, надо создать новый текстовый файл с текстом программы на Си++ и добавить его в проект. Для этого выполните следующие действия:
1)Выберите команду меню File→New.
2)В окне создания нового файла перейдите на закладку Files (рис. 1.16).
Рис. 1.16. Закладка Files (Файлы) в окне создания нового файла.
13
3)В списке выберите тип нового файла: C++ Source code (исходный файл Си++).
4)По умолчанию новый файл будет добавлен в текущий проект hello_world_console (т.к. установлен флажок Add to project).
5)В строке File name наберите имя нового файла – hello (расширение ".CPP" будетдобавленоавтоматически).
6)Нажмите OK.
MS Visual C++ создаст новый файл hello.cpp в папке C:\Ivanov\hello_world_console и
добавит его в проект hello_world_console. Новый файл автоматически будет открыт в окне текстового редактора (рис. 1.17). Наберите в нем текст программы, печатающей на экране короткое сообщение:
#include <iostream.h> int main()
{
cout << "Hello world!\n"; return 0;
}
Чтобы сохранить набранный текст на диске, выберите команду меню File→Save
Рис. 1.17. Окно текстового редактора с открытым файлом hello.cpp.
Сборка проекта Результатом сборки проекта является исполняемый файл программы, который может
работать независимо от MS Visual C++ 6.0.
Для сборки проекта выберите команду меню Build→Build hello_world_console.exe. В нашем примере проект содержит только один исходный файл (hello.cpp). В процессе сборки он будет скомпилирован и скомпонован со стандартной библиотекой ввода/вывода.
Информация о выполнении сборки от ображается в окне Output window (рис. 1.18). В нем выводятся сообщения, выдаваемые программами, работающими при сборке проекта: препроцессором, компилятором и компоновщиком. Среди этих сообщений могут встретиться сообщения об ошибках (errors) и предупреждения о возможных ошибках (warnings). Если таких сообщений не возникло, значит, сборка успешно завершена (рис. 1.18).
Рис. 1.18. Окно Output window (Окно вывода) расположено в нижней части окна Developer Studio.
Если есть ошибки, их надо устранить и снова попытаться собрать проект.
14
3.Запуск нового приложения
Врезультате сборки было создано консольное приложение. Такие приложения широко использовались до появления систем Windows. Они удобны для учебных целей, т.к. простая структура консольных программ позволяет на начальном этапе изучения языка программирования не отвлекаться на системные особенности программ для Windows.
Для запуска приложения выберите команду меню Build→Execute hello_world_console.exe.
После выбора команды запуска создаётся консольное окно – окно, напоминающее экран компьютера, работающего под управлением MS-DOS, а не Windows. Консольное приложение осуществляет ввод/вывод данных в пределах этого окна (рис. 1.19).
Рис. 1.19. Окно консольного приложения hello_world_console.exe.
Более подробные сведения об использовании среды разработки содержатся в справочной системе.
Часть 3. Введение в тип данных КЛАСС.
ООП - методология, основанная на представлении программ в виде совокупности объектов, которые между собой взаимодействуют, причем каждый объект является реализацией конкретного класса. ТоестьосновнымэлементомООПявляетсякласс.
Класс — это тип данных, вводимый пользователем. Классы, как правило, организованы иерархически. Основное назначение класса - описание состава, основных свойств и поведения будущих объектов этого типа данных (введение в проекте некоей абстракции). При этом каждый класс имеет общедоступную часть - интерфейс, а также недоступную, скрытую от пользователя личную часть или реализацию, которая и представляет внутреннее строение будущих объектов данноготипа.
Таким образом, в ООП абстрагирование - процесс введения типа данных «класс», т.е. таких существенных характеристик некоторых будущих объектов, которые и будут отличать их от других видовобъектов.
Общийформатдекларациитипаданных«класс» следующий:
вид_класса ID_класса (идентификатор данного типа данных) { элементы-данные; // Далее - просто «данные» элементы-функции;// Далее - просто «методы»
};
Рассмотримкраткуюхарактеристикуэлементов, составляющихописаниекласса.
Атрибут «вид_класса» |
|
Видытипаданных«класс»: union |
struct class |
Атрибуты доступа
Элементы, входящиевшаблонкласса, могутиметьследующуюстепеньзащищенности: public - глобальный, общедоступный атрибут доступа; в этом случае элементы
общедоступныизлюбойфункциипроекта;
15
private - локальный, частный; элементы закрыты от общего доступа, и с ними могут работатьтолькометодыкласса;
protected - защищенные элементы класса, к ним имеют доступ методы данного класса и методыклассов, производныхотданногокласса.
Как правило, закрытые элементы - это внутреннее строение объектов, которое нас не должно интересовать.
Все три вида класса имеют степень защиты элементов, которую компилятор установит по умолчанию.
Вид union - степень защиты public, управлять ею нельзя.
Вид struct - степень защиты public, управлять защитой можно. Вид class - private, степенью защиты также можно управлять.
Для управления защитой элементов, входящих в состав класса, необходимо явно указать нужный атрибут, после которого добавить символ : (двоеточие).
Существуетдваспособасозданияобъектовстаким составомданных.
1.Между символами «}» и «;» помещается список идентификаторов объектов, и уже на этапе компиляции будут созданы объекты с указанным типом данных. При таком способе заданияатрибутID_классаможноопускать.
2.Декларацияобъектовкласса влюбомместепрограммыпомеренадобности:
ID_класса список ID объектов;
Данные, входящие в состав класса, - любой допустимый вид данных языка C++, за исключениемфайлов.
Методы, входящиевсоставкласса, можноразделитьнатригруппы.
1.Методы, определяющиеоперациинадданными.
2.Функции-конструкторы, основная задача которых - создание и инициализация объектов данного классаразнообразнымиспособами.
3.Функции для уничтожения объектов после их использования - деструкторы.
Внешние функции, не входящие в состав класса, могут работать только с элементами класса, имеющимиатрибутдоступаpublic.
Декларацияметодовклассавозможна вдвухформах:
-вформеопределения, прикоторойприводитсяполныйтекстметода;
-в форме описания (прототип метода). В данном случае вне шаблона должно быть полное определение метода, при этом необходимо указать, к какому классу принадлежит данный метод. Для этого используется операция привязки «::». Назначение этой операции - привязать функцию к конкретному классу.
Использованиеэтойоперациивводитновоеопределение:
Полное квалификационное имя
Запись X:: аозначает: «Элемент а принадлежит классуX». Запись X ::f1 () означает: «Функция f1 принадлежит классу X».
Ивзаключение рассмотрим некоторыеприемыработыобъектамииметодами. Пустьвпроцессеработыпрограммысозданобъекткласса
ID_класса ID_объекта;
ипустьвсоставеклассаестьметодсидентификаторомID_метода. Тогда:
1.Прямойвызовметода
ID_объекта. ID_метода; //- использованаоперацияпривязки«точка».
2.Использованиекосвеннойадресации
ПустьобъявленуказательстипомID_класса:
ID_класса*ID_указателя;
Теперьуказательтипа ID_классаможноустанавливатьнасуществующие объекты этогокласса:
ID_указателя= & ID_объект;
-указательидентифицированадресомобъекта.
16
Косвенныйвызовметода:
ID_указателя-> ID_метода;
- использованаоперацияпривязки«стрелка».
3.Созданиеобъектов(безымянных) вдинамическойобластипамяти
ID_класса* ID_указателя - new ID_класса;
Компиляторсоздаетобъектнаэтапеработыпроекта. Косвенныйвызовметода:
ID_указателя-> ID_метода;
Упражнение 3. Написать объектную программу, иллюстрирующую прямой и косвенный способы обращения к методам. Пользовательский класс должен содержать необходимые элементы - данные, метод установки их начальных значений, метод печати, метод, решающий поставленную задачу. Коды методов – вне пространства определения класса.
а) разность трех целых чисел; б) произведение трех целых чисел; в) сумму трех целых чисел;
г) сумму трех чисел с плавающей запятой; д) разность трех чисел с плавающей запятой;
е) произведение трех чисел с плавающей запятой; ж) результат деления двух целых чисел с проверкой деления на ноль;
з) результат деления двух чисел с плавающей запятой с проверкой деления на ноль.
Пример. Сложение двух целых чисел.
#include <iostream.h>
class CMySum
{
int i; int j;
int rezult;
public:
void Set(int a, int b); void Print();
void CalculateSum();
};
void CMySum::Set(int a, int b)
{
i = a; j = b;
}
void CMySum::Print()
{
cout << "i="<<i << " j=" <<j << " i+j="<<rezult << "\n";
}
void CMySum::CalculateSum()
{
rezult = i+j;
}
void main(void)
17
{
CMySum objMySum; CMySum *p_objMySum;
cout << "Direct method.\n"; objMySum.Set(2,3); objMySum.CalculateSum(); objMySum.Print();
cout << "Indirect method.\n"; p_objMySum = &objMySum; p_objMySum->Set(4,5); p_objMySum->CalculateSum(); p_objMySum->Print();
}
Контрольные вопросы.
1)Рабочие области среды разработка MS Visual C++ 6.0.
2)Понятие проекта в Visual C++ 6.0.
3)Синтаксис функции MessageBox() Visual C++ 6.0.
4)Что в ООП означает понятие “класс” и что входит в его состав?
5)Перечислите виды классов, и укажите их различия?
6)Укажите способы управления защитой элементов, входящих в состав класса.
7)Что такое операция привязки, её основное назначение?
8)Дайте понятие полного квалификационного имени.
Лабораторная работа №2.
Использование элементов управления. Использование конструктора и деструктора. Работа с динамической памятью.
Цель работы: изучить способы использования элементов управления в среде Microsoft Visual C++ 6.0. Изучить основные способы работы по созданию конструкторов с захватом динамической памяти и деструкторов для её освобождения.
Часть 1. Среда разработки Microsoft Visual C++ 6.0.
Использование элементов управления.
1. Создание нового проекта
Для изучения элементов управления Microsoft Visual C++ 6.0 создадим лабораторную программу, выполняющую следующие действия:
•При вводе в строке редактирования слов "Paint" и "Calculator", запускаются соответственно "Windows Paint" и "Windows Calculator".
•При снятии флажка Visible, строка редактирования исчезает, а при снятии флажка Enabled, закрывается доступ к окну редактирования.
•При отмечании флажков, все происходит наоборот.
При запуске вашей программы, главное окно будет выглядеть так (рис. 2.1):
18
Рис 2.1. Внешний вид лабораторной программы №2.
Вначале запустите Visual C++. Откройте пункт меню FILE -> NEW, перейдите на закладку Project. Отметьте MFC AppWizard(exe). В Project Name задайте имя программы Test.
Нажмите OK. Далее повторите все шаги по созданию проекта программы из лабораторной работы №1.
2.Проектирование диалоговой панели.
1)Для этого вначале выберите закладку "Resourse View" и раскройте пункт Hello Resource, как показано на рис. 2.2.
Рис. 2.2 Закладка Resource View
2)Щелкните два раза по надписи IDD_TEST_DIALOG. Справа появится окно проектирования диалоговой панели.
3)С помощью панели Controls расставьте элементы, управления как показано на рис. 2.1 и согласно таблице 2.1.
19
|
|
Таблица 2.1. Оконные элементы программы. |
|
Объект |
Свойство |
Установка |
|
Dialog Box |
ID |
IDD_TEST_DIALOG |
|
|
Caption |
The Test Program |
|
|
Font |
System, Size 10, страница Styles |
|
|
панель Minimize |
отмечена, страница Styles |
|
|
панель Maximize |
отмечена, страница Styles |
|
Edit Box |
ID |
IDC_TEST_EDIT |
|
Group Box |
ID |
IDC_STATIC |
|
|
Caption |
Test |
|
Static Text |
ID |
IDC_STATIC |
|
|
Caption |
INSTRUCTIONS: To execute the Paint program: type Paint |
|
|
|
in the edit box. To execute the Calculator program, type |
|
|
|
Calculator in the edit box. To terminate the program, type |
|
|
|
Exit in the edit box. |
|
Check Box |
ID |
IDC_VISIBLE_CHECK |
|
|
Caption |
&Visible |
|
Check Box |
ID |
IDC_ENABLED_CHECK |
|
|
Caption |
&Enabled |
|
Push Button |
ID |
IDC_TEST_BUTTON |
|
|
Caption |
&Test |
|
Push Button |
ID |
IDC_CLEAR_BUTTON |
|
|
Caption |
&Clear |
|
Push Button |
ID |
IDC_EXIT_BUTTON |
|
|
Caption |
E&xit |
|
|
Client edge |
отмечен, страница Extended Styles |
|
|
Static edge |
отмечен, страница Extended Styles |
|
|
Modal frame |
отмечен, страница Extended Styles |
|
3. Связывание переменных с окном редактирования и флажками
Для окна редактирования нужна переменная типа CString, используя эту переменную, мы сможем извлекать текст из окна редактирования, а также изменять его содержимое.
Также необходимо связать переменные с флажками, чтобы управлять ими и получать текущие состояния: включено, выключено.
1)Зайдите в View->ClassWizard и выберите закладку Member Variables. В этом пункте вы можете связывать переменные с элементами управления. Окно должно быть выглядеть как на рисунке 2.3:
2)Выберем в списке Control IDs идентификатор IDC_TEST_EDIT и нажмем кнопку Add Varible (рис.2.4)
3)В Member Varible Name задайте название - m_TestEdit и нажмите кнопку OK. Вы связали окно редактирования с переменной m_TestEdit, с помощью которой вы получите доступ к окну редактирования.
4)Теперь свяжите флажки с переменными, для этого перейдите к закладке Member Varible, идентификатор IDC_ENABLE_CHECK и нажмите на кнопку Add Varible. Задайте название переменной - m_EnableCheck. Посмотрите, эта переменная имеет категорию Value и тип BOOL. Переменная типа BOOL может принимать два значения TRUE и FALSE. TRUE - правда, а FALSE - ложь. Если флажок отмечен, то переменная будет иметь значения TRUE, а если нет - FALSE.
5)Теперь выберите в закладке Member Varible итендификатор IDC_VISIBLE_CHECK и нажмите на кнопку Add Varible. Задайте название переменной - m_VisibleCheck.
20
