• No results found

Програмування на Visual C++ із застосуванням бібліотеки MFC : навчальний посібник / В

N/A
N/A
Protected

Academic year: 2022

Share "Програмування на Visual C++ із застосуванням бібліотеки MFC : навчальний посібник / В"

Copied!
214
0
0

Повний текст

(1)

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ СУМСЬКИЙ ДЕРЖАВНИЙ УНІВЕРСИТЕТ

В. В. АВРАМЕНКО, А. М. СКАКОВСЬКА

ПРОГРАМУВАННЯ НА VISUAL C++

ІЗ ЗАСТОСУВАННЯМ БІБЛІОТЕКИ MFC

Навчальний посібник

Рекомендовано Міністерством освіти і науки України

Суми

Сумський державний університет 2015

(2)

УДК 004.434(075.8) ББК 32.973.2я73 А21

Рецензенти:

Є. П. Путятін – доктор технічних наук, професор, заслужений діяч науки і техніки України, завідувач кафедри інформатики Харківського національного університету радіоелектроніки;

М. Д. Кошовий – доктор технічних наук, професор, завідувач кафедри авіаційних приладів та вимірювань Національного аерокосмічного університету ім. М. Є. Жуковського «ХАІ»

Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів

вищих навчальних закладів (лист № 1/11-10429 від 08.07.2014)

А21 Авраменко В. В.

Програмування на Visual C++ із застосуванням бібліотеки MFC : навчальний посібник / В. В. Авраменко, А. М. Скаковська. – Суми : Сумський державний університет, 2015. – 215 с.

ISBN 978-966-657-558-9

Навчальний посібник містить стислий виклад теоретичного матеріалу до кожної теми, практичне завдання та зразок його вирішення. Проте, щоб дати початкове уявлення про програмування на C++/CLR, у посібнику наведена одна тема зі створення консольного застосування для версії С++.

Призначений для студентів вищих навчальних закладів, які навчаються за напрямом підготовки «Інформатика» і вивчають сучасні інформаційні технології у рамках дисциплін

«Алгоритмічні мови» та «Системне програмування», а також для викладачів кафедр інформатики ВНЗ.

УДК 004.434(075.8) ББК 32.973.2я73

ISBN 978-966-657-558-9

© Авраменко В. В., Скаковська А. М., 2015

© Сумський державний університет, 2015

(3)

Зміст C.

Вступ ... 7

Інтегроване середовище розроблення. Створення проекту консольного додатка Win32 ... 9

Налагодження проекту консольного додатка Win32 ... 19

Додавання класів до консольного додатка Win 32 ... 27

Введення/виведення в консольному додатку CLR. Табуляція функції ... 37

Створення і виконання Windows-програм із застосуванням бібліотеки Microsoft Foundation Classes ... 45

Діалогове вікно як головне ... 54

Табуляція функції, коли діалогове вікно є головним ... 61

Створення діалогового вікна, коли головним є документ ... 68

Створення та редагування ресурсів меню під час роботи із C++ стандарту ISO/ANSI ... 77

Робота з графікою за допомогою бібліотеки MFC ... 82

Створення та використання прапорців під час програмування на C++ стандарту ISO/ANSI ... 104

Використання перемикачів під час програмування на C++ стандарту ISO/ANSI ... 108

Спільне використання прапорців і перемикачів під час програмування на C++ стандарту ISO/ANSI ... 113

Робота зі списками під час програмування на C++ стандарту ISO/ANSI ... 118

Робота з комбінованими полями під час програмування на C++ ISO/ANSI ... 124

Робота з бігунками під час програмування на C++ ISO/ANSI .. 128

Серіалізація стандартних об’єктів під час роботи з файлами 136 Серіалізація результатів табуляції функції при використанні діалогу ... 147

(4)

Серіалізація нестандартних об'єктів під час роботи з

файлами ... 155

Введення/виведення записів під час роботи з файлами з використанням бібліотеки MFC ... 164

Створення простого графічного редактора ... 176

Діагностичні засоби MFC ... 200

Робота з налагоджувальною інформацією ... 204

Список літератури ... 209

Предметний покажчик ... 210

(5)

Вступ

Метою навчального посібника є формування практичних навичок програмування у Visual Studio C++ 2010. Проте перш ніж звернутися до специфіки Windows - програмування, необхідно добре вивчити засоби програмування С++, зокрема з його об’єктно-орієнтованими аспектами. Техніка об’єктно- орієнтованого програмування є ключем до ефективності всіх інструментів середовища Visual C++, що використовуються при створенні програм для Windows.

Версія системи розробки від корпорації Microsoft Visual Studio C++ 2010 підтримує два різних, але тісно пов'язаних представлень мови С++. У ній реалізований вихідний стандарт C++ ISO/ANSI. Крім того, є нова версія С++, так звана C++/CLI, яка була розроблена Microsoft і тепер затверджена у стандарті ECMA. Ці версії взаємно доповнюють одна одну. C++ ISO/ANSI призначений для розроблення високопродуктивних програм, що виконуються вашим комп'ютером як «рідні». При цьому використовується бібліотека Microsoft Foundation Classes (MFC). C++/CLI розроблений спеціально для .Net Framework із використанням Windows Forms.

У посібнику розповідається про те, що являє собою процес програмування на C++ ISO/ANSI із застосуванням бібліотеки MFC.

При недостатньому об'сязі годин, відведених на практичні заняття, недоцільно їх розпорошувати на вивчення обох технологій. Проте, щоб дати початкове уявлення про програмування на C++/CLI, у посібнику

(6)

також наведені рекомендації щодо створення консольного застосування для цієї версії С++.

Навчання відбувається на прикладах програм, що працюють. При цьому Microsoft Visual C++ 2010 розглядається як набір інструментів, за допомогою якого можна скласти програму для вирішення конкретного завдання. Матеріал розміщений у порядку зростання складності з урахуванням отриманого досвіду. Тому рекомендується всі роботи виконувати в тій послідовності, в якій вони викладені в навчальному посібнику. При виконанні кожної роботи необхідно в процесі ознайомлення із загальними вказівками ввести в комп'ютер як приклад супровідну програму, запустити її і відлагодити. Потім за контрольними запитаннями перевірити засвоєння матеріалу і повторити написання програми уже без допомоги посібника. У разі успішної перевірки для закріплення матеріалу рекомендується запропонувати власну постановку завдання і скласти програму для її вирішення.

У посібнику можна знайти означення всіх базових понять, що використовуються. Для цього передбачено спеціальний індексний покажчик.

(7)

Інтегроване середовище розроблення. Створення проекту консольного додатка Win32

Постановка завдання

Ознайомитися з інтегрованим середовищем розроблення. Створити проект консольного додатка Win32.

Загальні вказівки

Інтегроване середовище розроблення (Integrated Development Environment (IDE)) – середовище для створення, компіляції, компонування і налагодження програм на С++. Компоненти системи:

1. Редактор.

2. Компілятор.

3. Компонувальник.

4. Бібліотеки.

При запуску VISUAL C++ 2010 відкривається вікно.

Воно містить: вікно провідника рішень (Обозреватель решений), стартову сторінку (Начальная страница), в правій верхній частині вікна знаходиться вікно редактора, у нижній частині вікна – вікно виведення (Вывод). Вікно провідника рішень дозволяє вибирати потрібні файли та відображати їх у вікні редактора, а також додавати нові файли до існуючої програми. У цьому вікні чотири вкладки:

Обозреватель решений, Окно классов, Диспетчер свойств, Командный обозреватель.

(8)

Вікно редактора – це місце, де відбуваються введення і модифікація коду та інших компонентів програми. Вікно виведення відображає повідомлення, отримані при компіляції та компонуванні програм.

Опції панелі інструментів

Передбачені для вибору панелей інструменти, які повинні відображатися. Клацнувши правою кнопкою мишки на область панелі інструментів, викликаємо динамічне меню. Встановлюємо потрібні команди.

(9)

Панелі інструментів, які стискуються (dockable) Це такі панелі, які за допомогою мишки можна перетягувати в зручне місце всередині вікна. Всі панелі на панелі інструментів можуть стискуватися.

Документація

Бібліотека розробника Microsoft Development Network (MSDN) містить довідкову інформацію про всі можливості Visual C++ 2010. Виклик – кнопка F1.

Створення проекту консольного додатка Win32 Створити Windows-програму можна декількома

способами: вибрати пункт меню

Файл/Создать/Проект, або натиснути Ctrl+Shift+N. І, нарешті, у вікні Начальная страница можна клацнути на Создать проект…

З'явиться вікно Создать проект. У лівій частині цього вікна вибрати тип проекту Win32. Це також ідентифікує майстер створення додатків, який наповнить проект початковим змістом. У правій частині вікна знаходиться список шаблонів, доступних для вибраного зліва типу проекту. Вибраний шаблон використовується майстром додатка при створенні файлів, з яких складається проект. Вибрати шаблон Консольное приложение Win32.

(10)

У полі <Имя> вводиться ім'я проекту, наприклад Consol_01. Натиснути Enter або клацнути на кнопці ОК.

Викликається діалогове вікно майстра Мастер приложений Win32.

Клацнути на вкладку Параметры приложения в лівій частині, щоб відобразити сторінку настроєнь додатка. Тут можна вибрати опції, які потрібно застосувати до проекту. При створенні порожнього проекту вибирається опція Пустой проект. Як правило, вибирається Консольное приложение.

Клацнути на кнопці Готово.

(11)

Якщо було вибрано Консольное приложение, то за допомогою провідника Обозреватель решений можна побачити папку рішення і папку проекту.

Створений проект буде автоматично відкритий у Visual C++ 2010. За допомогою вкладки Обозреватель решений відкрити файл Readme.txt.

Там описаний вміст папки проекту. Щоб звернутися до проекту, необхідно двічі клацнути лівою кнопкою на його імені в полі Обозреватель решений. У полі

(12)

редактора можна перемикатися між декількома завантаженими файлами, просто клацаючи на відповідну вкладку.

Вкладка Окно классов відображає класи, визначені в проекті, а також вміст кожного з класів. Поки що в даному додатку немає жодного класу.

Вкладка Диспетчер свойств показує властивості, встановлені для налагоджувальної (Debug) і робочої (Release) версій проекту.

(13)

Вкладка Ресурсы відображає діалогові вікна, піктограми, панелі меню та інші ресурси, які використовує програма. Оскільки у даному випадку створюється консольна програма, в ній не використовуються жодні ресурси.

Подібно до більшості елементів IDE-середовища Visual C++ 2010, Обозреватель решений та інші вкладки являють собою контекстно-залежне меню.

Воно викликається клацанням правої кнопки мишки на елементах, що відображаються на вкладках, а інколи і на порожньому місці цих вкладок.

Модифікація вихідного коду

Мастер приложений Win32 генерує повний консольний додаток Win 32, який можна скомпілювати і запустити. Програма, що спочатку була згенерована, нічого не робить. Внесемо до неї зміни, необхідні для виведення заданого тексту на екран. Якщо файл Console_01.cpp не відображається в панелі редактора, потрібно двічі клацнути на його імені в панелі Обозреватель решений. Цей файл – головний вихідний файл програми, який був згенерований майстром Мастер приложений Win32.

Саме у цьому файлі буде розміщена головна функція _tmain(). Якщо у файлі не відображаються номери рядків, виберіть в головному меню Сервис/Параметры/Текстовый редактор/C/С++. У правій панелі виберіть Показывать/Номера строк.

(14)

Необхідно звернути увагу, що головна функція має символічне ім'я _tmain( ) і має два формальні параметри. Щоб мати можливість введення з клавіатури і виведення на екран, потрібно додати директиву препроцесора #include <iostream>. Тепер у текст головної функції можна вставити оператор для введення рядка символів, наприклад std::cout<<”I am glad to see you!!!”. Щоб уникати префікса std при зверненні до імен стандартних функцій введення/виведення (cin/cout), можна застосувати інструкцію using namespace std. Її слід розмістити до написання заголовка функції _tmain( ).

// Consol_01.cpp

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {

cout<<"I am glad to see you!!!";

return 0;

}

Складання рішення

Щоб побудувати рішення, натисніть клавішу F7 або виберіть пункт меню Построение/Построить решение. Ураховуючи, що в даному прикладі до рішення входить лише один проект, можна також

(15)

викликати меню Построение/Построить Console_01. Результати будуть одні й ті самі.

При внесенні до програми будь-яких змін, поправок необхідно викликати Построение/

Перестроить решение або Ctrl+Alt+F7. Можна також перебудувати лише проект Построение/

Перестроить Console_01.

У разі, коли необхідно запустити послідовність операцій компіляції, компонування і виконання програми, можна просто одночасно натиснути Ctrl+F5.

Налагоджувальна і робоча версії програми Можна встановити широкий діапазон будь-яких опцій проекту, вибравши пункт меню Проект/

Свойства: Console_01. Ці опції визначають, як обробляється код на стадіях компіляції і компонування. Набір опцій, який породжує конкретну версію програми, називається конфігурацією.

Visual C++ 2010 автоматично створює конфігурації для побудови двох версій додатка. Одна з них – налагоджувальна (Debug), містить інформацію, що допомагає при налагодженні програми. Інша версія називається робочою (Release). У ній немає жодної налагоджувальної інформації, що дозволяє забезпечити максимальну ефективність виконуваного модуля.

(16)

Для вибору конфігурації використовується пункт меню Построение/Диспетчер конфигураций…

З'явиться вікно, в якому в колонці Активная конфигурация решения можна вибрати Debug або Release, після чого клацнути по кнопці Закрыть. Як правило, конфігурацію Release встановлюють після ретельного налагодження програми в конфігурації Debug.

Виконання програм

Після успішної компіляції і компонування програму можна запустити, натиснувши Ctrl+F5. Це відповідає виклику за допомогою меню Отладка/Запуск без отладки.

Запуск налагоджувального режиму можна зробити з меню Отладка/Начать отладку або натиснувши F5. При налагоджуванні можна використовувати переривання, а також реалізувати покрокові режими Шаг с заходом (клавіша F11) і Шаг с обходом (клавіша F10).

Контрольні запитання

1. Які вікна входять до вікна додатка і для чого вони призначені?

2.Як установлюються опції панелі інструментів і які з них, як правило, вибираються?

3. Як звернутися в бібліотеку розробника MSDN?

4.Як створити проект консольного додатка Win32?

(17)

5. Що таке рішення і як його скласти?

Налагодження проекту консольного додатка Win32

Як правило, середовище розроблення IDE містить спеціальні засоби для налагодження програм – налагоджувачі. Налагоджувач має інтерфейс користувача для покрокового виконання програми оператор за оператором або функція за функцією із зупинками в контрольних точках програми (breakpoint) чи при досягненні якоїсь умови та для динамічного відображення значень змінних (трасування змінних).

Налагоджувач може використовуватися безпосередньо або запускатись автоматично, якщо під час виконання програми щось відбувається не так, як потрібно. Є можливість виявити місце аварійного переривання програми. Можна розглянути послідовність викликів функцій, що виконувалися в момент переривання (це називається переглядом стека викликів), відобразити значення локальних і глобальних змінних. Цієї інформації зазвичай буває достатньо для виявлення помилки. В іншому випадку можна повторно запустити програму в покроковому режимі, щоб виявити, де саме розпочинається неправильна поведінка. Проте навіть найкращий налагоджувач може лише допомогти локалізувати

(18)

помилку, а виправити її повинен програміст. Більш детально про це можна прочитати в [1, 2].

Отже, налагоджувач (debugging) – це програма, яка контролює виконання вашої програми таким чином, що ви можете покроково виконувати код, рядок за рядком або ж запустити його до певної точки в програмі. У кожній точці програми, де налагоджувач зупиняється, можна переглянути (або змінити) значення змінних, перш ніж продовжити виконання.

Можна змінити вихідний код, перекомпілювати, а потім перезапустити програму спочатку. Можна змінити вихідний код під час покрокового виконання програми. При переході до наступного оператора після модифікації коду налагоджувач автоматично перекомпілює програму перед виконанням наступного оператора.

Щоб зрозуміти базові засоби налагодження середовища розроблення Visual C++ 2010, використовуйте налагоджувач у програмі, яка, як ви впевнені, працює правильно. Переконайтеся, що конфігурація складання прикладу встановлена в Win32 Debug, а не у Win32 Release. Поточна активна конфігурація складання показана в парі спадних списків панелі інструментів Стандартная. Потім клацніть правою кнопкою миші на панелі інструментів. Переконайтеся в наявності прапорця перед Отладка, щоб відображалася панель інструментів для налагодження програми. Вона

(19)

з'являється автоматично, коли запущений налагоджувач.

Конструкція Debug включає додаткову інформацію у виконувану програму під час компіляції, необхідну для налагодження. Вона зберігається у файлі *.pdb в папці Debug. Конфігурація Relase виключає таку інформацію.

Запускати налагоджувач можна вибором пункту меню Отладка/Начать отладку або клавішею F5.

Налагоджувач має два головних режими виконання – покрокове виконання коду і виконання до певної точки, зазначеної у вихідному коді. Визначається вона або місцем розташування курсора, або спеціально призначеною точкою зупину, яка називається точкою переривання (breakpoint). У цій точці налагоджувач перериває виконання програми. Це дозволяє переглянути змінні програми і за необхідності змінити їх значення. Щоб установити точку переривання на початку рядка коду, необхідно клацнути кнопкою мишки на сірій вертикальній колонці зліва від номера рядка оператора, на якому потрібно призупинити виконання програми. З’явиться червоний круглий символ, який називається гліфом (glyph). Видалити точку переривання можна подвійним клацанням на гліфі. Існує можливість специфікувати безліч точок переривання з тим, щоб виконання програми зупинялося в необхідних місцях.

(20)

Опція Начать отладку виконує програму до першої точки переривання, якщо її встановлено. Далі программу можно виконувати послідовно крок за кроком. Для цього в опції Отладка існують команди Шаг с заходом (F11) і Шаг с обходом (F10). В обох випадках виконується по одному оператору за один раз. У першому випадку здійснюється захід у кожен вкладений блок коду та в кожну функцію, що викликається. Вибір пункту Шаг с обходом виконує оператори по одному за крок. При цьому виконується весь код, використовуваний функціями, які можуть бути викликані всередині оператора, як суцільний потік операцій без зупинок.

Під час налагодження програми необхідно контролювати поточні значення параметрів. Для цього досить підвести курсор до потрібного ідентифікатора. Але зручніше, коли поточні значення постійно відображаються у вікні. З цією метою необхідно ввімкнути Начать отладку. Потім вибрати пункт меню Отладка/Окна/Локальные або Отладка/Окна/Видимые. У першому випадку у вікні з'являться поточні значення усіх локальних змінних.

Це не завжди зручно, бо цей список може бути великим. Зручніше вибрати Окна/Видимые. У цьому випадку у вікні з'являються значення тільки видимих в даний момент змінних. За необхідності їх значення можна змінити. Для цього потрібно викликати

(21)

контекстне меню, вибрати пункт Изменить значение і встановити нове значення.

Необхідно звернути увагу на файл *.exe , який на чорному фоні з’являється при введенні даних. Якщо це вікно залишається відкритим, налагодження програми зупиняється. Вікно *.exe потрібно згорнути. Якщо необхідно переглянути проміжні результати, це вікно потрібно розгорнути. За необхідності переходу від однієї точки переривання до іншої, потрібно скористатися клавішею <F5>.

Розглянемо приклад налагодження програми debug1.cpp, в якій виконується табулювання функції

x k x ln k

y із одночасним накопиченням суми результатів, а потім обчислюється корінь квадратний із цієї суми.

#include "stdafx.h"

#include<iostream>

#include<math.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {

double x,xn,dx,xk,y,k=2.1,s=0,z;

cout<<"Enter xn="<<endl;

cin>>xn;

cout<<"Enter dx="<<endl;

cin>>dx;

cout<<"Enter xk="<<endl;

cin>>xk;

for(x=xn;x<=xk;x+=dx)

(22)

{

if(x>0) {

y=k*log(x)+k*x;

s+=y;

cout<<"x="<<x<<" y="<<y<<endl;

} else

cout<<"It's impossible to calculate y for x= "<<x<<endl;

}

if(s>=0) {

z=sqrt(s);

cout<<"z= "<<z<<'\n';

} else

cout<<"It's impossible to calculate z for s= "<<s<<'\n';

cout<<"Finish!"<<'\n';

return 0;

}

На скріншоті наведено фрагмент програмного коду із трьома точками переривання.

(23)

Щоб запустити налагоджував, потрібно виконати такі дії:

1. Вибрати пункт меню Отладка/Начать отладку.

2. З’явиться вікно debug1.exe. Ввести значення xn, dx, xk.

3. Програма зупинилася на першій точці переривання. Згорнути вікно debug1.exe.

(24)

4. Виконати цикл за допомогою кнопки <F10>, якщо хочемо перевіряти роботу кожного оператора, або кнопки <F5>. При цьому у вікні Видимые можна контролювати поточні значення змінних, які в даний момент потрапляють в область видимості.

5. Після завершення циклу програма зупиниться на наступній точці переривання. Можна проконтролювати значення отриманої суми.

6. Натиснувши на <F5>, можна відразу перейти до останньої точки переривання. Подальше продовження налагодження приведе до кінця програми.

7. Вибрати пункт меню Отладка/Остановить отладку.

Мають місце й інші можливості для налагодження програми. Зокрема, це використання розширених точок переривання, точок трасування, стека викликів функцій. Крім того, існує механізм обробки виключень. Із усіма цими можливостями можна познайомитися самостійно в [1, 2].

Контрольні запитання

1. Звідки беруться помилки в програмах і як із ними боротися?

2.Прийоми налагодження проекту консольного додатка Win32.

3. Базові операції налагодження проекту консольного додатка Win32.

(25)

Додавання класів до консольного додатка Win 32

Постановка завдання

Створити проект консольної програми Win 32. До нього додати клас «Букет» з елементами даних:

назва, кількість квіток у букеті, вартість однієї квітки, вартість букета. Передбачити функції-члени: для введення значень елементів-даних із клавіатури, для розрахунку вартості букета і для виведення значень усіх елементів-даних на екран. У головній функції описати об'єкт класу і реалізувати виклик усіх функцій-членів.

Визначення класу

Клас – це визначення типу даних, що задається користувачем. Він містить елементи даних, які можуть бути як змінними базових типів С++, так і інших, визначених користувачем типів. Елементи даних класу можуть бути окремими елементами даних, масивами, покажчиками, масивами покажчиків, об'єктами інших класів. Клас також може містити функції, які оперують об'єктами класу, звертаючись до елементів даних. Таким чином, клас об'єднує визначення елементарних даних, з яких складається об'єкт, і засоби маніпулювання цими даними.

Дані та функції в класі називаються членами класу.

Члени класу, які є елементами даних, називаються даними-членами (або полями), а функції, що

(26)

належать класу, – функціями-членами (або методами класу).

Розглянемо приклад класу – клас man. Визначити тип даних man, використовуючи ключове слово class, можно таким чином:

class man {

private:

char* name;

int day;

float ras;

float zar;

public:

void getinfo(void);

void calcul(void);

void putinfo(char* imja);

};

Тут у фігурних дужках визначено чотири дані- члени класу і три функції-члени. Визначення класу завершується крапкою з комою. Імена всіх членів класу локальні стосовно нього, тому їх можна використовувати ще десь у програмі.

Ключове слово public (відкритий) визначає атрибут доступу до членів класу, які йдуть за ним.

Визначення даних-членів як public означає, що ці члени доступні в будь-якій точці в області видимості об'єкта класу, до якого вони належать. Можна

(27)

вказати члени класу як private (закритий) або protected (захищений).

Оголошують об'єкти класу так само, як і об'єкти базових типів.

man slesar; //Оголошення об'єкта slesar типу man

Загальні вказівки

Нехай створений консольний додаток Win32 з ім'ям Consol_01 (див. попередню тему). Ставиться завдання додати до нього клас man з елементами даних:

char*name; //ім'я

int days; //кількість відпрацьованих днів float rascenka; //скільки гривень за один день float zarplata;

Передбачити функції-члени (методи):

void getinfo(); // Введення елементів даних void calculation(); // Розрахунок зарплати

void putinfo(char*); /* Виведення на екран усіх елементів даних. */

У головній функції описати об'єкт класу man і реалізувати виклик методів класу. Для цього необхідно виконати ряд дій:

1. Вибрати пункт меню Проект/ Добавить класс…

2. У вікні, що з’явилося, вибрати категорію C++.

Шаблон (templates) автоматично встановиться на Класс C++. Натиснути кнопку Добавить.

(28)

3.З'явиться вікно Мастер универсальных классов C++

– Consol_01. У поле Имя класса ввести ім'я man.

Одночасно отримають таке саме ім'я .hfile і .cppfile. У полі Базовый класс нічого не зазначати, оскільки клас man не є похідним. У полі Доступ залишити public.

Натиснути кнопку Готово.

4. Переконаємося, що у файлі man.h з'явився опис класу man. Для цього вибрати вкладку Обозреватель решений, клацнути на знак «+» навпроти зображення папки Заголовочные файлы. Розкриється вміст цієї папки. Двічі клацнути на файлі man.h.

У вікні редактора з'явиться такий текст:

#pragma once class man

(29)

{

public:

man(void);

~man(void);

};

Двічі клацнути на файлі man.cpp. У ньому з’явиться текст:

#include “stdAfx.h”

#include “man.h”

man::man(void) //Пустий конструктор.

{ }

man::~man(void) //Пустий деструктор.

{ }

5.До класу man додамо елементи даних. Це можна було б зробити самостійно. Але краще використовувати меню.

Для цього потрібно:

• Виділити вкладку Окно классов.

• Клацнути на «+» навпроти Consol_01.

Розкриється вміст.

• Виділити клас man і натиснути праву кнопку мишки. У меню, що розкрилося, вибрати Добавить/Добавить переменную… З'явиться вікно Мастер добавления переменной-члена – Consol_01.

(30)

• У вікні Доступ вибрати доступ private.

• У вікні Тип переменной ввести char*.

• Ім'я name ввести у вікні Имя переменной.

• Натиснути кнопку Готово.

Так само ввести й інші елементи даних.

6.До класу man додати функції-члени (методи). Для цього виділити клас man і правою кнопкою миші викликати контекстне меню. Вибрати Добавить/Добавить функцию. З'явиться вікно Мастер добавления функции-члена – Consol_01.

Заповнити вікна: Тип возвращаемого значения, Имя функции, Тип параметра, Имя параметра. Якщо

(31)

функція без параметрів, у вікні Тип параметра вводити void.

При цьому вікно Имя параметра залишається порожнім. Якщо ж у функції є один і більше параметрів, то потрібно вводити тип першого параметра, його ім'я, далі – натиснути Добавить.

Після цього вводять тип та ім'я другого параметра і знову натискають Добавить. У вікні Доступ встановлюють мітку доступу. За замовчуванням це public. Натиснути Готово.

Так, наприклад, для void putinfo (char*imja) у вікно Тип параметра вводимо char*, а в Имя параметра – imja. Натиснути Добавить, а потім – Готово.

(32)

7. Переходимо на вкладку Обозреватель решений і розкриваємо файл man.h. Якщо він є у списку вверху вікна редагування, то необхідно просто клацнути на нього. Переконаємося, що у файлі man.h є заголовки членів-функцій та елементи даних класу man разом із мітками доступу.

8. Розкриваємо файл man.cpp та виявляємо, що всі елементи даних у конструкторі ініціалізовані нулями:

man::man(void):name(NULL), days(0),

rascenka(0), zarplata(0) {

}

9. Тепер необхідно самостійно визначити вміст членів-функцій класу man, заповнюючи їх у файлі man.cpp. За необхідності можна описати і використовувати у них локальні змінні.

Заповнюємо член-функцію getinfo().

void man::getinfo() {

name=new char[12];

cout<<”Enter name”<<endl;

cin>>name;

cout<<”Enter days”<<endl;

cin>>days;

count<<”Enter rascenka”<<endl;

cin>>rascenka;

(33)

}

Далі заповнюємо інші методи.

void man::calculation() {

zarplata=days*rascenka;

}

void man::putinfo(char*imja) {

cout<<”For object”<<imja<<”name=”<<name<<

”days=”<<days<<”rascenka=”<<rascenca<<

”zarplata=”<<zarplata<<endl;

}

Для того щоб працювали cin і cout, необхідно до файла man.cpp додати

#include<iostream>

using namespace std; // Опис простору імен.

10. Тепер необхідно заповнити головну функцію _tmain(). Для цього на вкладці Обозреватель решений вибрати файл Consol_01.cpp і додати до нього

#include “man.h”

Інакше з'явиться помилка: «man undeclared identifier» (man – неоголошений ідентифікатор).

У головній функції визначимо об'єкт slesar, який працюватиме з функціями-членами:

(34)

{

man slesar;

slesar.getinfo();

slesar.calculation();

slesar.putinfo(“slesar”);

}

11. Будуємо і запускаємо програму. Це можна зробити, натиснувши Ctrl+F5 або за допомогою меню Построение/Построить решение, а потім (якщо немає помилок) Отладка/Запуск без отладки.

Контрольні запитання

1. Як створити проект консольного додатка Win 32?

2. Як додати до проекту клас?

3.Як ввести в клас елементи даних та члени-функції?

4. Яке розширення у файла, в якому описані клас, елементи даних і члени-функції, і як його розкрити?

5.Яке розширення у файла, в якому визначені члени- функції класу, і як його розкрити?

6. У якому файлі знаходиться головна функція і як його розкрити? Навіщо в цьому файлі директива

#include “*.h”?

(35)

Введення/виведення в консольному додатку CLR.

Табуляція функції

Постановка завдання

Створити проект консольного додатка для C++/CLI, що здійснює табуляцію функції y=f(x) при зміні x від xn до xk із кроком dx. Вид функції та числове значення задати самостійно.

Загальні вказівки

Загальномовне середовище виконання (Common Language Runtime – CLR) вимагає розширеної версії С++, яка має назву C++/CLI.

Тут CLI (Common Language Infrastructure) – інфраструктура спільної мови. Як і для «рідного» С++, що визначається стандартом ISO/ANSI, для С++/ CLI теж існує можливість створювати консольні проекти.

Для цього необхідно виконати ряд дій:

1. На Начальная страница клацнути на Создать проект.

2.У вікні Создать проект шаблон CLR/Консольное приложение CLR. У вікні Имя ввести ім'я Inputoutput.

Клацнути на ОК або на Enter.

3. У вікні для редагування з'явиться текст файла Inputoutput.cpp. У головній функції main( ) уже є функція WriteLine(). Це функція С++/СLI, яка визначена в класі Console простору імен System. Тому в тексті програми після #include “stdafx.h” розміщується using

(36)

namespace System; // використання простору імен System.

Клас Console являє собою стандартні потоки введення/виведення, що відповідають клавіатурі і командному рядку консольного вікна.

Функція WriteLine( ) виводить на екран усе те, що знаходиться в дужках і дає перехід на новий рядок.

Буква L попереду рядка символів вказує на те, що рядок складається із «широких» символів, де кожен займає 2 байти замість одного.

Тут запрограмовано виведення на екран рядка

“Будьте здорові!”.

4. Натиснувши Ctrl+F5, запускаємо компіляцію і компонування програми. На екрані з'явиться запрограмований рядок.

5. Внесемо зміни до головної функції.

Запрограмуємо розрахунок відстані, яку може проїхати автомобіль. Нехай об'єм паливного бака автомобіля V=40 л, питома витрата палива r =0,095 л/км. Потрібно обчислити відстань Rasst, яку проїде машина.

int main (array<System::String^> args) {

double v=40, r =0.095, Rasst;

Rasst=v/r;

Console::Write(L”Rasst=”); // Після L пустий // символ ставити не можна!

Consol::Writeline(Rasst);

(37)

return 0;

}

Зверніть увагу на те, що спочатку виведений рядок символів ”Rasst=”, а потім – саме значення Rasst.

Можна виведення зробити простішим:

Consol::Writeline(L”Rasst={0}”, Rasst);

або у разі виведення трьох параметрів:

Consol::Writeline(L”Rasst={0},v={1},r={2}”, Rasst,v,r);

У фігурних дужках зазначені номери аргументів у списку: під нульовим номером – Rasst, під першим – v, під другим – r.

Дані, що виводяться, можна форматувати.

Припустимо, що вам потрібно вивести значення Rasst з плаваючою точкою з двома десятковими розрядами після точки. Це можна зробити таким чином:

Consol::Writeline(L”Rasst={0:F2}”, Rasst);

Буква F у специфікаторі формату свідчить про те, що виведення повинне бути у форматі ±ddd.dd, (де d – десяткова цифра), а 2 – кількість розрядів після точки.

(38)

У загальному вигляді специфікація формату має такий вигляд: {n,w:axx}, де

n – номер аргументу у списку;

w – необов'язкова специфікація ширини поля;

А – односимвольна специфікація формату значення;

хх – необов'язкове одно- або двозначне число, задаючи точність виведення значення.

Таблиця специфікаторів формату

Специфікатор формату

Опис

С або с Виводить значення в грошовому форматі D або d Виводить ціле в десятковій системі E або e Виводить значення з плаваючою точкою

F або f Виводить число з фіксованою точкою G або g Виводить число в найбільш компактній

формі як Е або як F

X або x Виводить ціле число у шістнадцятковій системі на верхньому регістрі, якщо Х, і

на нижньому – якщо х

Специфікація w ширини поля – ціле зі знаком. Якщо w > 0, то значення буде вирівняне вправо у полі w, а якщо w < 0, то – вліво.

Якщо значення займає менше знаків, ніж зазначено у w, то введення доповнюється пропусками, а якщо

(39)

значення не поміщається в полі завширшки w, то специфікація ширини поля ігнорується.

Клавіатурне введення у С++/CLI

Можливості введення з клавіатури для консольних програм .NET Framework дещо обмежені. Можна прочитати рядок символів як текстовий рядок, використовуючи для цього функцію Console::Readline(). Якщо потрібно прочитати певний символ, необхідно застосувати функцію Console::Read(). Можна також визначити натиснуту клавішу за допомогою функції Console::ReadKey().

Прочитані символи повинні кудись заноситися. Для цього, як правило, використовуються покажчики. У С++/CLI є так звані відстежувані дескриптори, подібні до «рідних» покажчиків С++. Але на відміну від покажчика дескриптор зберігає адресу, яка автоматично оновлюється так званим збирачем

«сміття», якщо об'єкт, на який він посилається, переміщується під час стискання купи. Друга відмінність: до таких покажчиків не можна застосовувати арифметику адрес. Також не дозволяється зведення дескрипторів.

Відстежувані дескриптори описуються таким чином:

тип^ім’я_дескриптора;

(40)

Нагадаємо, покажчик у C++ ISO/ANSI має такий вигляд:

тип *ім’я_покажчика;

Дуже важливо пам'ятати, що у С++/CLI пам'ять, відстежувана дескриптором, виділяється, оновлюється і звільняється автоматично. Для занесення інформації при зчитуванні рядків або окремих символів зручно застосовувати відстежуваний дескриптор типу String.

String^ ім’я _дескриптора;

Можна поєднати опис дескриптора з читанням рядка або символа. Наприклад:

String ^ line= Console::ReadLine();

Якщо потрібно використовувати дескриптор line послідовно кілька разів, необхідно окремо його описати, а потім послідовно в нього заносити результати роботи функцій Console::ReadLine() або Console::Read(). Наприклад:

String^str;

str=Console::ReadLine();

……….

str= Console::Read();

(41)

……...

Саме так використовується відстежуваний дескриптор у нижче наведеній програмі табуляції функції.

За необхідності введення числових значень спочатку зчитується рядок символів, а потім він перетворюється в число необхідного типу. Для цього можна використовувати функцію Parse. Наприклад, для змінної х типу double потрібно ввести з клавіатури числове значення. Нижче наводиться фрагмент програми:

String^str= Console::ReadLine();

x=Double::Parse(str);

Console::WriteLine(L”x={0}”,x);

Нехай із клавіатури введено послідовність символів 12.35. Вона заноситься в str, а потім перетворюється в число 12.35, яке буде виведене на екран.

Приклад програми табуляції функції. Потрібно обчислити y = sin(x)*ex для випадку, коли х змінюється від xn до xk з кроком dx. Необхідно створити консольну програму для С++/CLI з ім'ям tabul.

#include <stdafx.h>

#include <math.h>

using namespase System;

Посилання

СУПУТНІ ДОКУМЕНТИ

У вироблених із застосуванням даної культури сирах, що солилися у ропі з концентраціями солі 16%, 20%, 24%, визначено взаємозв’язок між вмістом солі

А для цього необхідно насамперед продемонструвати конкурентоспроможність на внутрішньому ринку, придбати навички й освоїти технології, що

у власній папці і на дискеті та записати використовувані команди. Закрити вікно документа та вікно програми. Увага! Файл даної лабораторної

у власній папці і на дискеті та записати використовувані команди. Закрити вікно документа та вікно програми. Увага! Файл даної лабораторної

Нехай пряма c (мал. Для цього через поча- ток координат проведемо пряму а || c. Вона має той самий кутовий коефіцієнт k, тому задається рівнянням

Тому вважаємо за доцільне зупинитися не стільки на питаннях, по- в’язаних власне з історією Карпатської України, як на подіях,

Для цього необхідно виконати наступне: перевести вказівку миші на заголовок вікна, натиснути ліву кнопку миші та не відпускаючи її, перетяг-

– кандидат філологічних дисциплін, доцент, завідувач кафедри філологічних дисциплін та соціальних комунікацій.. – директор Наукової бібліотеки

б для партії продукції провадиться атестація виробництва якщо вирішено органом із сертифікації та заявником; випробування на зразках, відібраних

The category of simple types in the JavaScript language includes numbers, text strings (which are usually called just strings) and logical (or Boolean) values.. The special

Якщо депозитор розміщує самостійно матеріал в репозитарії, або передає його до наукової бібліотеки НаУКМА для розміщенням цього матеріалу

Головною метою проєктувальників колекцій одягу для вітчизняного та іноземного ринку є підтримання та розвиток швейної галузі та моди

створювати найбільш сприятливі для цього умови. Одним із способів, що дають змогу держа- ві аналізувати наявність певних прогалин у

Бурдін у тому, що іноді неповнолітні, які звільняються від покарання із застосуванням примусових заходів виховного характеру (ч. 105 КК

Також хочеться закцентувати увагу на тому, що бібліотеки — це не лише місце, де можна користуватися літературою. На сьогодні,

4. Висвітлення проблем волинської історії на сучасному етапі розвитку історичної науки в Республіці Польща [1, с. У середині кожного із зазначених етапів

Посилання в тексті роботи на літературні джерела необхідно позначати в кінці речення порядковим номером за переліком посилань. Бібліографічний

В даній роботі, із застосуванням методу комплексних потенціалів, для лінеаризованої теорії пружності тіл з початковими напруженнями,

Виконати команду меню Банк– Выписка банка, створити новий документ, вибрати Счет в банке, визначити дату документа 14/01/2013

у власній папці і на дискеті та записати використовувані команди. Закрити вікно документа та вікно програми. Увага! Файл даної лабораторної

У процесі проведення цього дослі- дження використано метод динамічного програмування, що ґрунтується на описі процесу розподілу вигод у кластері

Враховуючи відмінності маркетингу в офлайн і онлайн середовищі, модифікова- ну систему збуту з орієнтацією на кіберсере-

Припустимо, що необхідно визначити ціну ліцензії у формі щорічних відрахувань (роялті) від вартості виробленої продукції по ліцензії із