
- •Л. Б. Бузюков, о. Б. Петрова
- •Учебное пособие
- •Предисловие
- •Глава 1. Введение в язык с
- •1.1. История создания и особенности языка с
- •1.3. Элементы языка с
- •1.3.1. Основные символы
- •1.3.2. Ключевые слова
- •1.3.3. Идентификаторы
- •1.3.4. Константы
- •1.3.5. Лексемы
- •1.3.6. Комментарии
- •Глава 2. Типы данных языка c
- •2.1. Числовые типы данных
- •2.2. Объявление переменных
- •2.3. Данные целого типа
- •2.4. Данные вещественного типа
- •Глава 3. Выражения
- •3.1. Операции
- •3.1.1. Арифметические операции
- •3.1.2. Операция присваивания
- •Глава 4. Составление простейших программ
- •4.1. Препроцессор и его функции
- •4.2. Основные директивы препроцессора
- •4.2.1. Директива include
- •4.2.2. Директива define
- •4.2.3. Директива undef
- •4.3. Структура и правила составления программ
- •4.3.1. Структура функции
- •4.3.2. Функция main()
- •4.3.3. Структура простой программы
- •4.3.4. Правила записи объявлений, операторов и комментариев
- •4.3.5. Пример простейшей программы
- •Глава 5. Средства ввода/вывода
- •5.1. Общие замечания
- •5.2. Функция форматированного вывода printf()
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Глава 6. Управляющие операторы
- •6.1. Условные операторы
- •6.1.1. Логические выражения
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •6.2. Операторы цикла
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3. Операторы перехода
- •6.3.1. Оператор break
- •6.3.2. Оператор continue
- •6.3.3. Оператор return
- •6.3.4. Применение оператора goto и меток
- •Глава 7. Функции
- •7.1. Основные понятия
- •7.2. Определение функции
- •7.3. Прототип функции
- •7.4. Вызов функции
- •Глава 8. Классы памяти
- •8.1. Логическаяструктура памяти программы
- •8.2. Особенности классов памяти
- •8.3. Объявления переменных
- •8.4. Объявления функций
- •8.5. Время жизни и область видимости программных объектов
- •8.6. Инициализация глобальных и локальных переменных
- •Глава 9. Указатели
- •9.1. Операция получения адреса
- •9.2. Операции над указателями
- •Глава 10. Массивы
- •10.1. Общие сведения о массивах
- •10.2. Одномерные массивы
- •10.3. Двумерные массивы
- •10.4. Массивы и указатели
- •10.5. Массивы и функции
- •Глава 11. Строки
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Глава 12. Структуры
- •12.1. Определение структуры
- •12.2. Структуры и функции
- •12.3. Указатели на структуру
- •12.4. Массивы структур
- •12.5. Вложенные структуры
- •12.6. Использование синонима типа
- •12.7. Объединения
- •Глава 13. Файлы
- •13.1. Работа с файлами
- •13.2. Функции ввода/вывода
- •Глава 14. Динамическая память
- •14.1. Распределение памяти
- •14.2. Функции управление памятью
- •Глава 15. Проект
- •15.1. Основы создания проекта
- •15.2. Пример создания проекта
- •Глава 17. Основы объектно-ориентированного программирования
- •17.1. Объектно-ориентированный подход
- •17.3. Конструкторы и деструкторы
- •17.4. Инкапсуляция
- •17.5. Полиморфизм
- •17.6. Наследование
- •17.7. Виды взаимодействия классов
- •17.8. Способы графического представления объектно-ориентированной задачи
- •18.2. Библиотека Win32 api
- •18.3. Библиотека owl
- •18.4. Библиотека vcl
- •18.5. Библиотека clx
- •18.6. Библиотека mfc
- •18.7. Библиотека OpenGl
- •19.3. Создание проекта
- •19.4. Редактирование проекта
- •19.5. Компиляция и выполнение программы
- •19.6. Файловая структура проекта
- •19.7. Создание консольного приложения
- •Глава 20. Разработка приложений для операционных систем windows
- •20.1. Взаимодействие программы и Windows
- •20.2. Компоненты библиотеки Win32 api
- •20.3.Функция WinMain()
- •20.4. Оконная процедура
- •20.5. Структура программы для ос Windows
- •20.6. Ресурсы Windows
- •20.7. Взаимодействие прикладной программы и устройств в Windows
- •Глава 21. Создание приложений для ос windows на основе библиотеки mfc
- •21.1. Обзор классов библиотеки mfc
- •21.2. Класс cString
- •21.3. Класс cFile
- •21.4. Класс cPoint
- •21.5. Класс cRect
- •21.7. Приложение, основанное на диалоге
- •21.8. Использование в приложении элементов управления
- •21.9. Мастер классов mfc ClassWizard
- •21.10. Установка начального значения элементам управления
- •21.11. Элементы управления Picture
- •21.12. Элемент управления Group Box
- •21.13. Элемент управления Radio Button
- •21.14. Элемент управления Check Box
- •21.15. Элемент управления List Box
- •21.16. Создание меню
- •21.17. Приложение с двумя диалоговыми панелями
- •21.18. Приложение sdi
- •21.19. Создание панели инструментов
- •21.20. Приложение mdi
- •21.21. Контекстыустройств в mfc
- •21.22. Графические объекты Windows в mfc
- •21.23. Графические операции в mfc
- •П.1. Основы методологии конструирования программ
- •П.1.1. Основные понятия. Программа и алгоритм
- •П.1.2. Этапы разработки программ
- •П.2. Алгоритмы
- •П.2.1. Алгоритм и его свойства
- •П.2.2. Способы описания алгоритмов
- •П.2.3. Средства графического изображения алгоритмов Схемы алгоритмов
- •Псевдокоды
- •Структурограммы
- •П.3. Основные приемы программирования
- •П.3.1. Разновидности структур программирования
- •П.3.2. Программирование линейных и разветвляющихся процессов
- •П.3.3. Программирование циклических процессов
- •Арифметический цикл (цикл с параметром)
- •Итерационный цикл
- •Вложенный цикл
- •Литература
17.8. Способы графического представления объектно-ориентированной задачи
В объектно-ориентированном анализе можно выделить три группы диаграмм [13].
Диаграмма сущность-связь – ERD-диаграмма (Entity-Relationship Diagram). Примером таких диаграмм могут служить диаграммы классов, простейшие примеры которых приведены на рис. 17.4 – рис. 17.8, а также диаграммы объектов, модулей. Диаграммы демонстрируют статические связи между однотипными сущностями (классами, объектами и т. д.). Сущности на такой диаграмме изображаются прямоугольником, линии, соединяющие прямоугольники, обозначают связи между сущностями.
Диаграмма потоков данных – DFD-диаграмма (Data Flow Diagram). Пример такой диаграммы – хорошо знакомые нам блок-схемы алгоритмов. Узлы такой диаграммы (прямоугольники, ромбы, параллелограммы и т. д.) обозначают отдельные действия над данными или подпрограммы, линии, соединяющие их, обозначают направление потока данных и, соответственно, последовательность выполнения действий.
Диаграммы переходов состояний – STD-диаграммы (State Transition Diagram). Узлы такой диаграммы представляют собой допустимые состояния объекта, а соединяющие их линии – возможность и направление перехода из одного состояния в другое. На диаграмме также могут быть отмечены события, вызывающие данный переход, или соответствующие им методы. Кроме того, на диаграмме можно отметить последовательность переходов, тогда диаграмма будет также описывать поведение объекта.
Для примера рассмотрим объект – принтер. Ранее у объекта были выявлены два свойства, изменяющие свои значения во время использования объекта – is_on (обозначающее, включен ли принтер) и status (определяющее, печатает принтер в данный момент или нет) – и три допустимых состояния, исключив из допустимых состояний возможность печати при выключенном принтере (рис. 17.9).
Рис. 17.9. STD-диаграмма переходов
Такие диаграммы – основа современного языка, предназначенного для описания объектно-ориентированной задачи – языка UML (Unified Modeling Language – универсальный язык моделирования) [11, 14].
17.9. Особенности реализации объектно-ориентированных программ на языке С++ в различных средах
Если вы решили написать объектно-ориентированную программу, нужно позаботиться о подходящей среде программирования. Выбор невелик и зависит от операционной системы, в которой будет работать ваше приложение.
Универсальной средой, позволяющей создавать объектно-ориентированные программы для MS-DOS и 16-разрядные приложения под Windows, остается продукт Borland C++ 3.1 фирмы Borland. В этой среде можно создавать программы, весь код которых сосредоточен в одном файле, а также можно создавать проекты.
Более новые продукты – Borland C++ 5.x предназначены для создания полноценных приложений для Windows 9.x. Среда имеет элементы автоматизации работы программиста – средства для модульного построения программы и создания каркаса проекта, графический редактор для визуального редактирования диалоговых панелей, меню, подключаемые библиотеки BWCC (библиотека управляющих элементов), OWL (иерархическая библиотека классов, предназначенных для создания элементов графического интерфейса приложения), MFC (библиотека классов фирмы Microsoft). Возможно создание не только приложения (*.exe), но и динамической библиотеки (*.dll). Разработка программы ведется только на основе проекта.
Еще более новый и совершенный продукт – C++ Builder обладает достоинствами предыдущей среды, а также формирует вспомогательную часть кода программы (создает заготовку для кода класса, функции), позволяет использовать современные библиотеки, а также имеет мощный и удобный инструмент для настройки свойств элементов интерфейса пользователя программы (диалоговые панели, кнопки и т. д.). Разработка программы ведется только на основе проекта.
Фирма Microsoft также создала современную среду для разработки 32-разрядных приложений под Windows – Microsoft Visual C++, аналогичную по своим возможностям продукту Borland C++ Builder. Разработка программы ведется только на основе проекта.
Microsoft Visual C++ 6.0 входит в состав интегрированной среды разработки Microsoft Visual Studio, позволяющей создавать приложения различного назначения и с использованием различных языковых средств, включающей в себя следующие компоненты для разработки приложений и баз данных: Visual C++, Visual Basic, Visual J++, Visual FoxPro.
Автоматическую генерацию части кода программы выполняют два приложения: AppWizard (Мастер приложений) создает каркас проекта и MFC ClassWizard (Мастер классов) генерирует служебную часть кода класса.
В дополнение к Microsoft Visual Studio как отдельный продукт создана справочная система по программированию с помощью компонентов Microsoft Visual Studio – MSDN (Microsoft Developers Network).
Новейший продукт фирмы Microsoft – Visual Studio.NET. Этот продукт стал преемником Visual Studio, при этом в его состав включены новые версии компиляторов. Так, компилятор С++ в среде NET в большей степени соответствует современному стандарту языка С++, использует новую версию стандартной библиотеки С++, весьма требователен к совместимости типов данных. Добавлены новые и усовершенствованы прежние мастера для автоматической генерации кода программы: Application Wizard, MFC Class Wisard, Event Handler Wizard (Мастер редактирования обработчиков сообщений), Add Member Variable Wizard (Мастер добавления функции) и т. д.
Глава 18. БИБЛИОТЕКИ ЯЗЫКА C++
18.1. Стандартная библиотека языка C++ 18.2. Библиотека Win32 API 18.3. Библиотека OWL 18.4. Библиотека VCL 18.5. Библиотека CLX 18.6. Библиотека MFC 18.7. Библиотека OpenGL
Библиотеки предоставляют программисту возможность использовать при разработке программы готовые фрагменты кода [10, 15]. В библиотеки могут быть включены подпрограммы, структуры данных, классы, макросы. Для языка C++ разработано много библиотек различного назначения. Некоторые библиотеки используются по умолчанию, их подключение к проекту осуществляется автоматически (библиотека времени выполнения – RTL, Runtime Library). Другие библиотеки можно использовать по требованию (в консольном приложении VC++ – библиотека MFC), для этого следует подключить директивой include их заголовки и/или сделать соответствующие настройки проекта. Файлы, содержащие библиотеки, имеют расширение *.lib (статическая) и *.dll (динамическая).
Существуют два вида использования библиотек в исполняемом файле: статическое и динамическое. При статическом подключении фрагменты библиотек встраиваются в программу, что увеличивает ее код, но делает программу автономной, так как для выполнения готовой программы не требуется наличие библиотеки на компьютере. При динамическом подключении программа обращается к библиотеке в процессе своей работы. Динамическое подключение библиотеки экономит код, но для работы программы необходимо наличие библиотеки в определенном месте на диске.
18.1. Стандартная библиотека языка C++
Стандартная библиотека языка C++ (C++ Standard Library) – межплатформенная библиотека (Windows, Linux), основу которой составляет стандартная библиотека шаблонов STL (Standard Template Library)[5], включающая:
базовую поддержку средств языка времени выполнения, например, средства управление памятью,
стандартную библиотеку языка C,
строки и потоки ввода/вывода с поддержкой национальных алфавитов,
структуры данных, называемые контейнерами, и алгоритмы их обработки (сортировка, слияние),
поддержку численных расчетов, например, операции над векторами, обработку комплексных чисел.
Компоненты библиотеки подключаются с помощью заголовочных файлов:
<vector> – одномерный массив элементов;
<list> – двусвязный список элементов;
<queue> – очередь элементов;
<stack> – стек элементов;
<ctime> – дата и время;
<algorithm> – основные алгоритмы;
<cstdlib> – функции обработки данных (поиск, сортировка, обработка строк в стиле C, генератор случайных чисел);
<string> – строка;
<iostream> – стандартные потоки ввода/вывода;
<complex> – комплексные числа;
<c_math> – общие математические функции;
<new> – работа с динамической памятью.
Имена компонентов библиотеки определены в пространстве имен std. Пространство имен представляет собой область видимости имен, это средство логического группирования идентификаторов (п.16.5).
Приведем пример программы, использующей элементы стандартной библиотеки C++ (компоненты библиотеки STL).
Программа в заданном наборе чисел подсчитывает количество чисел, имеющих значение 5, 6, меньше 8:
//подключение заголовочных файлов библиотеки STL
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
int main ()
{
int sequence[10] = {1,2,3,4,5,5,7,8,9,10};
int i=0,j=0,k=0;
//
//Создание вектора
vector<int> v(sequence+0, sequence+10);
i=count(v.begin(),v.end(),5); //Считает пятерки
j=count(v.begin(),v.end(),6); //Считает шестерки
//
// Считает значения меньшие, чем 8
k=count_if(v.begin(),v.end(),bind2nd(less<int>(),8));
cout << i << " " << j << " " << k << endl;
return 0;
}
Ответ: 2 0 7.