Table Of ContentГалина Довбуш
Анатолий Хомоненко
Под редакцией профессора Хомоненко А. Д.
Санкт-Петербург
«БХВ-Петербург»
2007
УДК 681.3.068+800.92VisualC++
ББК 32.973.26-018.1
Д58
Довбуш, Г. Ф.
Д58 Visual C++ на примерах / Г. Ф. Довбуш, А. Д. Хомоненко / Под ред.
проф. А. Д. Хомоненко. — СПб.: БХВ-Петербург, 2007. — 528 с.: ил.
ISBN 978-5-94157-918-1
Рассмотрены интерфейс системы программирования Visual C++, техника соз-
дания и отладки проектов приложений в среде Visual Studio 2005. Описаны основы
языка С++: типы данных и операции, приемы программирования разветвлений
и циклов, техника работы со статическими и динамическими массивами, исполь-
зование функций. Рассмотрены классы и объекты, механизм множественного
и одиночного наследования, перегрузка операторов и шаблоны классов, понятия
ввода-вывода данных и классификация, принципы работы с потоками и файлами,
стандартные классы потоков, форматированный ввод-вывод базовых типов, до-
полнительные возможности ввода-вывода. Освещена обработка исключений. По-
казаны особенности создания приложений API Windows и MFC. Представлены
внутренняя их организация, создание диалоговых окон и меню, механизм об-
работки сообщений, работа с картой сообщений. Приводятся многочисленные
примеры отлаженных программ. На компакт-диске содержатся тексты листингов
примеров программ, приведенных в книге.
Для начинающих программистов
УДК 681.3.068+800.92VisualC++
ББК 32.973.26-018.1
Группа подготовки издания:
Главный редактор Екатерина Кондукова
Зам. главного редактора Игорь Шишигин
Зав. редакцией Григорий Добин
Редактор Елена Кашлакова
Компьютерная верстка Натальи Караваевой
Корректор Виктория Пиотровская
Дизайн серии Игоря Цырульникова
Оформление обложки Елены Беляевой
Зав. производством Николай Тверских
Лицензия ИД № 02429 от 24.07.00. Подписано в печать 28.09.07.
Формат 70 1001/16. Печать офсетная. Усл. печ. л. 42,57.
Тираж 3000 экз. Заказ №
"БХВ-Петербург", 194354, Санкт-Петербург, ул. Есенина, 5Б.
Отпечатано с готовых диапозитивов
в ГУП "Типография "Наука"
199034, Санкт-Петербург, 9 линия, 12
ISBN 978-5-94157-918-1 © Довбуш Г. Ф., Хомоненко А . Д., 2007
© Оформление, издательство "БХВ-Петербург", 2007
Îãëàâëåíèå
Предисловие ........................................................................................................... 1
ЧАСТЬ I. ПРОСТЕЙШАЯ ПРОГРАММА НА ЯЗЫКЕ C++ ....................... 5
Глава 1. Подготовка программы к исполнению ............................................ 7
Глава 2. Среда программирования ................................................................... 9
Глава 3. Создание консольного приложения ................................................ 13
Запуск MVC++....................................................................................................... 13
Создание проекта в новой рабочей области ....................................................... 14
Открытие существующей рабочей области ........................................................ 16
Создание нового проекта в рабочей области ...................................................... 17
Активизация существующего проекта ................................................................ 19
Добавление исходных файлов в проект .............................................................. 19
Активизация исходного файла для редактирования .......................................... 21
Сохранение и закрытие файла ............................................................................. 22
Трансляция файлов реализации ........................................................................... 22
Компоновка ............................................................................................................ 24
Отладка приложения ............................................................................................. 25
Глава 4. Функция main ( ) .................................................................................. 28
Глава 5. Вывод текста на экран ....................................................................... 30
ЧАСТЬ II. ОСНОВЫ ЯЗЫКА C++ .................................................................. 33
Глава 6. Простые типы данных ....................................................................... 35
Константы простых типов .................................................................................... 37
Переменные простых типов ................................................................................. 38
Локальные переменные ........................................................................................ 39
IV Îãëàâëåíèå
Глобальные переменные ...................................................................................... 40
Область видимости переменных ......................................................................... 41
Глава 7. Ввод и вывод данных ......................................................................... 43
Глава 8. Операции над операндами простых типов .................................... 46
Арифметические операции .................................................................................. 46
Инкремент и декремент ........................................................................................ 47
Арифметические операции с присваиванием ..................................................... 48
Операции отношения ............................................................................................ 49
Логические операции ............................................................................................ 50
Глава 9. Операторы ............................................................................................ 52
Оператор-выражение ............................................................................................ 52
Составной оператор .............................................................................................. 52
Условный оператор if ............................................................................................ 53
Условный оператор if else .................................................................................... 54
Оператор цикла while ............................................................................................ 55
Оператор цикла for ................................................................................................ 56
Оператор цикла do while ....................................................................................... 58
Оператор передачи управления continue ............................................................ 59
Оператор передачи управления break ................................................................. 60
Оператор-переключатель switch .......................................................................... 61
Оператор возврата return ...................................................................................... 66
Тернарный оператор ?: ......................................................................................... 66
Оператор sizeof ...................................................................................................... 67
Глава 10. Массивы .............................................................................................. 68
Операции над массивами ...................................................................................... 68
Одномерные массивы ........................................................................................... 69
Многомерные массивы ......................................................................................... 75
Символьные массивы ............................................................................................ 85
Глава 11. Указатели ............................................................................................ 89
Операции с указателями ....................................................................................... 91
Указатели и массивы............................................................................................. 94
Операторы распределения памяти new и delete ............................................... 103
Указатели и динамические массивы ................................................................. 107
Указатели и спецификатор const ....................................................................... 109
Массивы указателей ............................................................................................ 111
Указатели на указатели ....................................................................................... 118
Îãëàâëåíèå V
Глава 12. Структуры ........................................................................................ 121
Операции доступа к элементам структуры ....................................................... 121
Инициализация структур .................................................................................... 124
Массивы структур ............................................................................................... 125
Глава 13. Функции ............................................................................................ 128
Прототип функции .............................................................................................. 128
Определение функции ........................................................................................ 129
Возвращаемое функцией значение .................................................................... 129
Вызов функции .................................................................................................... 129
Область видимости функции ............................................................................. 130
Включение функций в проект приложения ...................................................... 130
Передача параметра по значению ...................................................................... 131
Передача параметра по ссылке посредством указателя .................................. 131
Передача параметра по ссылке посредством ссылки ...................................... 131
Параметры по умолчанию .................................................................................. 132
Передача массива в качестве параметра функции ........................................... 132
Примеры функций ............................................................................................... 133
Функции обработки символов ........................................................................... 142
Основные функции обработки строк ................................................................ 147
Служебные функции преобразования строк .................................................... 151
Перегрузка функций ........................................................................................... 160
Шаблонные функции .......................................................................................... 164
ЧАСТЬ III. КЛАССЫ ....................................................................................... 173
Глава 14. Объекты и классы ........................................................................... 175
Спецификаторы доступа к членам класса ........................................................ 177
Объявление или спецификация класса ............................................................. 178
Реализация класса ............................................................................................... 179
Рекомендации по выбору имен .......................................................................... 181
Объявление объекта класса ................................................................................ 181
Доступ к членам объектов .................................................................................. 182
Конструкторы класса .......................................................................................... 183
Деструктор ........................................................................................................... 185
Вызов конструктора и деструктора ................................................................... 186
Указатель this ....................................................................................................... 190
Статические данные класса ................................................................................ 191
Статические методы класса ............................................................................... 193
VI Îãëàâëåíèå
Константные методы класса .............................................................................. 196
Класс string .......................................................................................................... 203
Объектно-ориентированная модель системы ................................................... 208
Глава 15. Композиция ...................................................................................... 211
Глава 16. Наследование ................................................................................... 224
Одиночное наследование ................................................................................... 226
Множественное наследование ........................................................................... 241
Чистые виртуальные функции и абстрактные классы..................................... 249
Глава 17. Перегрузка операторов .................................................................. 256
Операторные функции-члены класса ................................................................ 257
Операторные функции-друзья класса ............................................................... 270
Перегрузка операторов в производных классах ............................................... 285
Глава 18. Шаблон классов............................................................................... 293
Объявление шаблона классов ............................................................................ 294
Объявление объектов шаблона классов ............................................................ 297
Пример программы с простым шаблоном ........................................................ 298
Параметры по умолчанию в шаблоне классов ................................................. 303
Наследование и шаблоны классов ..................................................................... 306
Использование шаблонов ................................................................................... 312
ЧАСТЬ IV. ВВОД-ВЫВОД И ИСКЛЮЧЕНИЯ ......................................... 335
Глава 19. Основы ввода-вывода .................................................................... 337
Классификация способов ввода-вывода ........................................................... 337
Принципы работы с потоками и файлами ........................................................ 339
Стандартные классы потоков ............................................................................. 341
Форматированный ввод-вывод базовых типов ................................................ 345
Манипуляторы ..................................................................................................... 350
Анализ состояния потока ................................................................................... 353
Глава 20. Дополнительные возможности ввода-вывода ........................... 356
Форматированный ввод-вывод пользовательских типов ................................ 356
Файловый ввод-вывод ........................................................................................ 358
Неформатированный ввод-вывод ...................................................................... 361
Обмены со строкой в памяти ............................................................................. 365
Ввод-вывод с помощью библиотеки ANSI C ................................................... 366
Îãëàâëåíèå VII
Глава 21. Обработка исключений.................................................................. 381
Основы обработки исключений ......................................................................... 381
Управление обработкой исключений ................................................................ 385
ЧАСТЬ V. ПРИЛОЖЕНИЯ API..................................................................... 391
Глава 22. Характеристика приложений API Windows .............................. 393
Варианты приложений Windows ....................................................................... 393
Графический интерфейс приложений Windows............................................... 394
Контекст устройства ........................................................................................... 395
Состав приложения. Функция WinMain ............................................................ 396
Оконная процедура обработки сообщений ...................................................... 401
Пример заготовки приложения .......................................................................... 404
Шаги создания приложения API ........................................................................ 408
Глава 23. Разработка интерфейса приложения ........................................... 410
Создание меню .................................................................................................... 410
Создание диалогового окна ................................................................................ 412
Элементы управления ......................................................................................... 416
Пример задания оконных процедур .................................................................. 420
ЧАСТЬ VI. ПРИЛОЖЕНИЯ MFC ................................................................. 425
Глава 24. Характеристика приложений MFC ............................................. 427
Библиотека MFC ................................................................................................. 427
Этапы создания приложения MFC .................................................................... 428
Типы и состав приложений MFC ....................................................................... 429
Глава 25. Обработка сообщений .................................................................... 434
Карты сообщений ................................................................................................ 434
Макросы карт сообщений .................................................................................. 436
Типы передаваемых сообщений ........................................................................ 437
Глава 26. Разработка интерфейса приложения ........................................... 439
Общая характеристика интерфейса приложения ............................................. 439
Создание диалогового окна ................................................................................ 439
Создание класса окна .......................................................................................... 440
Доступ к элементам управления окна ............................................................... 441
Вывод текста в диалоговое окно........................................................................ 447
VIII Îãëàâëåíèå
Глава 27. Ввод-вывод с помощью класса CFile .......................................... 452
Создание объекта класса CFile .......................................................................... 452
Открытие и создание файлов ............................................................................. 452
Чтение и запись файлов ...................................................................................... 454
Список литературы .......................................................................................... 459
ПРИЛОЖЕНИЯ ................................................................................................ 461
Приложение 1. Контрольные вопросы и задания....................................... 463
Вопросы и задания к первой части .................................................................... 463
Вопросы и задания ко второй части .................................................................. 464
Вопросы и задания к третьей части ................................................................... 468
Вопросы и задания к четвертой части ............................................................... 471
Вопросы и задания к пятой части ...................................................................... 472
Вопросы и задания к шестой части ................................................................... 474
Приложение 2. Пример разработки консольного
приложения MVC++ ............................................................. 477
Методические указания для разработки ........................................................... 477
Общая структура приложения ........................................................................... 480
Особенности реализации класса CAuto ............................................................. 481
Класс CCmdMenu ................................................................................................ 483
Классы для организации работы с индексом CIndex и CKey .......................... 484
Класс CBinaryFile ................................................................................................ 484
Класс управления CControl ................................................................................ 485
Пример консольного приложения MVC++
по файловому вводу-выводу .............................................................................. 486
Приложение 3. Описание компакт-диска ..................................................... 505
Предметный указатель .................................................................................... 507
Предисловие
Система программирования Microsoft Visual C++ (MVC++) входит в состав
Visual Studio и является популярным инструментом, широко используемым
для разработки различного рода приложений, выполняемых под управлением
Windows, и обеспечивающим высокую эффективность их кода. Это обуслов-
лено (в частности) тем, что MVC++ разрабатывалась фирмой Microsoft —
создателем семейства операционных систем Windows.
По языку С++ и системе программирования MVC++ имеется большое мно-
жество учебной литературы. Предлагаемая книга также ориентирована на
использование в учебном процессе. При ее подготовке преследовалась цель
последовательно и систематично изложить приемы программирования в сре-
де MVC++, приводя сравнительно небольшой объем теоретических сведений
и продуманный набор содержательных примеров. Все приводимые примеры
отлажены в среде MVC++ из состава Visual Studio 2005.
В системе программирования MVC++ можно создавать достаточно большое
число различных видов приложений. Мы рассматриваем три основные раз-
новидности приложений: консольные приложения, приложения API Windows
и приложения MFC.
Консольные приложения в книге используются для рассмотрения основных
приемов программирования на языке С++ при создании приложений, в кото-
рых обмен информацией ведется в основном с помощью клавиатуры и экрана.
Приложения API Windows позволяют обеспечить развитый графический ин-
терфейс, основанный на использовании соответствующих функций и диало-
говых окон.
Приложения MFC также позволяют обеспечить развитый графический ин-
терфейс, основанный на использовании диалоговых окон. Вместо функций
API здесь используются компоненты библиотеки MFC, при этом повышается
удобство разработки приложений.