- •ВВЕДЕНИЕ
- •КЛАССЫ
- •Описание объектов
- •Указатель this
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Статические методы
- •Дружественные функции и классы
- •Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •НАСЛЕДОВАНИЕ
- •Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Абстрактные классы
- •ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •СТАНДАРТНАЯ БИБЛИОТЕКА
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Файловые потоки
- •СТРОКИ
- •Операции
- •Функции
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •КОНТЕЙНЕРНЫЕ КЛАССЫ
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Списки
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •ПРИЛОЖЕНИЕ 1. ШАБЛОНЫ ФУНКЦИЙ
- •ПРИЛОЖЕНИЕ 2. ШАБЛОНЫ КЛАССОВ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Федеральное агентство железнодорожного транспорта Уральский государственный университет путей сообщения
Кафедра «Информационные технологии и защита информации»
А. В. Кибардин
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++
Часть 2 Основы объектно-ориентированного программирования
Екатеринбург Издательство УрГУПС
2012
Федеральное агентство железнодорожного транспорта Уральский государственный университет путей сообщения
Кафедра «Информационные технологии и защита информации»
А. В. Кибардин
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ В трех частях
Часть 2 Основы объектно-ориентированного программирования
Учебно-методическое пособие для студентов направления 221000 – Мехатроника и робототехника профилей подготовки «Проектирование и конструирование
мехатронных модулей и механизмов роботов» и «Мехатронные системы в автоматизированном производстве»
Екатеринбург Издательство УрГУПС
2012
УДК 004.43 (075.8) К38
Кибардин, А. В.
К38 Программирование на языке С++. В 3 ч. Ч. 2 Основы объектноориентированного программирования : учеб.-метод. пособие /А. В. Кибардин. – Екатеринбург : Изд-во УрГУПС, 2012. – 75[1] c.
Пособие предназначено для изучения основ программирования на алгоритмическом языке С++.
Ориентировано на студентов специальности220401 – «Мехатроника», а также на студентов, аспирантов, слушателей ФПК и подготовительного отделения, обучающихся основам современных информационных технологий.
УДК 004.43 (075.8)
Печатается по решению редакционно-издательского совета университета
Автор: А. В. Кибардин, доцент кафедры «Информационные технологии и защита информации», канд. физ.-мат. наук, УрГУПС
Рецензенты: Г. Б. Смирнов, профессор кафедры «Вычислительная техника», д-р техн. наук, УрФУ им. первого Президента России Б. Н. Ельцина
В. И. Радченко, профессор кафедры «Информационные технологии и защита информации», д-р физ.-мат. наук, УрГУПС
©Уральский государственный университет путей сообщения (УрГУПС), 2012
ОГЛАВЛЕНИЕ |
|
ВВЕДЕНИЕ................................................................................................................................ |
5 |
КЛАССЫ .................................................................................................................................... |
6 |
Описание класса .............................................................................................................. |
6 |
Описание объектов ......................................................................................................... |
7 |
Указатель this.................................................................................................................... |
8 |
Конструкторы ................................................................................................................... |
9 |
Конструктор копирования .......................................................................................... |
12 |
Конструктор копирования для класса monstr: ...................................................... |
12 |
Статические элементы класса.................................................................................... |
13 |
Статические поля........................................................................................................... |
13 |
Статические методы ..................................................................................................... |
13 |
Дружественные функции и классы .......................................................................... |
14 |
Дружественные функции ...................................................................... |
14 |
Дружественный класс ........................................................................... |
15 |
Деструкторы.................................................................................................................... |
16 |
Перегрузка унарных операций ............................................................. |
17 |
Перегрузка бинарных операций ........................................................... |
18 |
Перегрузка операции присваивания .................................................... |
19 |
Перегрузка операции приведения типа ................................................ |
20 |
НАСЛЕДОВАНИЕ ................................................................................................................ |
21 |
Ключи доступа ............................................................................................................... |
21 |
Простое наследование.................................................................................................. |
21 |
Правила наследования методов ................................................................................ |
25 |
Виртуальные методы и механизм позднего связывания ................................... |
26 |
Абстрактные классы ..................................................................................................... |
27 |
ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ ................................................... |
28 |
Синтаксис исключений................................................................................................ |
28 |
Перехват исключений .................................................................................................. |
29 |
Список исключений...................................................................................................... |
31 |
Иерархии исключений ................................................................................................. |
32 |
СТАНДАРТНАЯ БИБЛИОТЕКА ..................................................................................... |
33 |
ПОТОКОВЫЕ КЛАССЫ..................................................................................................... |
33 |
Стандартные потоки ..................................................................................................... |
34 |
Форматирование данных............................................................................................. |
35 |
Флаги и форматирующие методы ........................................................ |
35 |
Манипуляторы....................................................................................... |
37 |
Методы обмена с потоком.......................................................................................... |
38 |
3
Ошибки потоков ............................................................................................................ |
42 |
Файловые потоки........................................................................................................... |
44 |
Строковые потоки ......................................................................................................... |
46 |
СТРОКИ.................................................................................................................................... |
48 |
Конструкторы и присваивание строк ...................................................................... |
48 |
Операции.......................................................................................................................... |
49 |
Функции ........................................................................................................................... |
49 |
Присваивание и добавление частей строк ........................................... |
49 |
Преобразование строк ........................................................................... |
50 |
Поиск подстрок ..................................................................................... |
51 |
Сравнение частей строк ........................................................................ |
52 |
Получение характеристик строк .......................................................... |
52 |
КОНТЕЙНЕРНЫЕ КЛАССЫ............................................................................................. |
53 |
Последовательные контейнеры................................................................................. |
55 |
Векторы ................................................................................................. |
55 |
Двусторонние очереди .......................................................................... |
59 |
Списки ................................................................................................... |
60 |
Ассоциативные контейнеры....................................................................................... |
65 |
Словари.................................................................................................. |
65 |
Словари с дубликатами (multimap) ...................................................... |
70 |
ПРИЛОЖЕНИЕ 1. ШАБЛОНЫ ФУНКЦИЙ ................................................................. |
71 |
ПРИЛОЖЕНИЕ 2. ШАБЛОНЫ КЛАССОВ .................................................................. |
74 |
4
ВВЕДЕНИЕ
В С/С++ вводится понятие класса– тип данных, объединяющий структуры данных и обрабатывающие их функции. Конкретные величины типа данных «класс» называются экземплярами класса или объектами.
Основными принципами объектно-ориентированного программирования
(ООП) являются инкапсуляция, наследование и полиморфизм.
Инкапсуляция – это объединение в единое целое данных и процедур(алгоритмов) обработки данных. В рамках ООП данные называются полями объекта, а алгоритмы их обработки (процедуры) – методами объекта. Инкапсуляция позволяет в максимальной степени изолировать объект от«внешнего» окружения, т. е. остальной программы, так как локализованные в объектах алгоритмы обмениваются с программой сравнительно небольшими объемами данных. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не ведет за собой плохо прослеживаемых последствий для программы в целом. Другим немаловажным следствием инкапсуляции является возможность переноса объектов из одной программы в другую.
Наследование есть свойство объектов порождать своих потомков. Объ- ект-потомок автоматически наследует от своего родителя все поля и методы, может дополнять объекты новыми полями и перегружать (перекрывать) методы родителя или дополнять их. Принцип наследования решает проблему модификации свойств и придает ООП исключительную гибкость. При работе с объектами программист обычно подбирает объект, наиболее подходящий по своим свойствам для решения данной задачи, и создает одного или нескольких потомков от него, которые «умеют» делать то, что не реализовано в их родителе.
Полиморфизм – это свойство родственных объектов, т. е. объектов, имеющих одного общего предка-родителя, решать схожие по смыслу проблемы разными способами. В рамках ООП возможности (свойства) объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта-родителя, программист может придавать потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть (перегрузить) его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объек- те-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разные алгоритмы ,иследовательно, придающих объектам разные свойства.
5