
- •Объектно-ориентированное программирование:
- •Содержание
- •Новый тип данных – класс
- •1.2. Доступность компонентов класса
- •1.3. Конструктор и деструктор
- •1.4. Компоненты-данные и компоненты-функции
- •1.4.1. Данные – члены класса
- •1.4.2. Функции – члены класса
- •1.4.3. Константные компоненты-функции
- •1.4.4. Статические члены класса
- •Указатели на компоненты класса
- •1.5.1. Указатели на компоненты-данные
- •1.5.2.Указатели на компоненты-функции
- •1.6. Указатель this
- •1.7. Друзья классов
- •7.1. Дружественная функция
- •1.7.2. Дружественный класс
- •1.8. Определение классов и методов классов
- •2. Наследование
- •2.1. Определение производного класса
- •2.2. Конструкторы и деструкторы производных классов
- •2.3. Виртуальные функции
- •2.4. Абстрактные классы
- •2.5. Включение объектов
- •2.6. Включение и наследование
- •2.7. Множественное наследование
- •2.8. Локальные и вложенные классы
- •2.9. Пример программы для Microsoft Visual Studio
- •2.10. Упражнения
- •3. Перегрузка операций
- •3.1. Перегрузка унарных операций
- •3.2. Перегрузка бинарных операций
- •3.4. Перегрузка операции вызова функции
- •3.5. Перегрузка операции присваивания
- •3.6. Перегрузка операции new
- •3.7. Перегрузка операции delete.
- •3.8. Основные правила перегрузки операций
- •3.9. Примеры программ
- •4. Шаблоны функций и классов
- •4.1. Шаблоны функций
- •4.2. Шаблоны классов
- •4.3. Компонентные функции параметризованных классов
- •4.4. Примеры программ.
- •5. Обработка исключительных ситуаций
- •5.2. Получение дополнительной информации об исключении
- •5.3. Определение типа исключения
- •5.4. Иерархия исключений
- •5.5. Спецификация функций, обрабатывающих исключения
- •6. Потоковые классы
- •6.1. Библиотека потоковых классов
- •6.3. Стандартные потоки ввода-вывода
- •6.4. Форматирование
- •6.5. Манипуляторы
- •6.6. Ввод-вывод объектов пользовательских классов
- •6.7. Определение пользовательских манипуляторов
- •6.8. Пользовательские манипуляторы с параметрами
- •6.9. Использование макросов для создания манипуляторов
- •6.10. Состояние потока
- •6.11. Неформатированный ввод-вывод
- •6.12. Файловый ввод-вывод
- •7.1. Пространство имен
- •7.2. Динамическая идентификация типов
- •7.3. Безопасное приведение типа
- •8. Стандартная библиотека шаблонов
- •8.1. Введение в stl
- •Парадигму обобщенного программирования можно сформулировать следующим образом:
- •8.2. Итераторы
- •8.3. Классы-контейнеры
- •Iterator find(const key_type&k)
- •Iterator lower_bound(const key_type&k)
- •Iterator upper_bound(const key_type&k)
- •8.4. Контейнер vector
- •8.5. Многомерные массивы
- •8.6. Ассоциативные контейнеры
- •8.7. Объекты-функции
- •8.8. Алгоритмы
- •I. Немодифицирующие операции
- •II. Модифицирующие операции
- •III. Сортировка
- •IV. Работа с множествами
- •V. Минимумы и максимумы
- •VI. Перестановки
Министерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Пермский национальный исследовательский
политехнический университет
А.М. Ноткин
Объектно-ориентированное программирование:
ООП на языке С++
Учебное пособие
Издательство ПНИПУ
2012
УДК 681.3
Н85
Рецензенты:
зав. лабораторией ТиИС ИМСС Уральского отделения РАН
канд. техн. наук, ст. научный сотрудник
Масич Г. Ф.
доцент кафедры Информационных технологий
и автоматизированных систем
Пермского государственного технического университета
канд. техн. наук, доцент
Полякова О. А.
Ноткин, А.М.
Объектно-ориентированное программирование:ООП на языке С++:
Учебное пособие / А.М.Ноткин.– Пермь: Изд-во ПНИПУ – 182 с.
Пособие является первой частью многотомного издания, посвященного технологии объектно-ориентированного программирования и посвящено ООП на языке С++. Следующие тома будут посвящены ООП на языках Java, C# NET, Pyton и Ruby.
Задача пособия – дать студентам основные понятия ООП и технологию объектно-ориентированного программирования на языке С++. Подробно рассматриваются синтаксис, семантика и техника программирования. Приведено большое количество примеров, иллюстрирующих возможности и особенности применения языка С++ для создания объектно-ориентированных программ.
Предназначено для студентов направления «Информатика и вычислительная техника» как для самостоятельной работы, так и в рамках аудиторных занятий.
УДК 681.3
©ФГБОУ ВПО «Пермский национальный исследовательский политехнический университет», 2012
Содержание
1. Классы С++……………………………………………….5
Новый тип данных– класс. …………………………….5
Доступность компонентов класса……………………..7
Конструктор и деструктор……………………………..8
Компоненты– данные и компоненты– функции…….14
Данные– члены класса………………………………14
Функции– члены класса…………………………….14
Константные компоненты-функции………………..15
Статические члены класса………………………… .15
1.5. Указатель на компоненты класса……………………..18
Указатель на компоненты– данные………………....18
Указатель на компоненты– функции……………….19
Указатель this…………………………………………...19
Друзья классов………………………………………….21
Дружественная функция……………………………..21
Дружественный класс………………………………..23
Определение классов и методов классов……………..24
2. Наследование……………………………………………..29
Определение производного класса……………………29
Конструкторы и деструкторы производных классов...32
Виртуальные функции…………………………………36
Абстрактные классы…………………………………...38
Включение объектов…………………………………..40
Включение и наследование……………………………42
Множественное наследование………………………...47
Локальные и вложенные классы………………………50
Пример программы…………………………………….54
Упражнения……………………………………………62
3. Перегрузка операций……………………………………..68
Перегрузка унарных операций………………………...69
Перегрузка бинарных операций……………………….70
Перегрузка операций ++ и --…………………………..71
Перегрузка операции вызова функции……………….72
Перегрузка операции присваивания………………….72
Перегрузка операции new……………………………..75
Перегрузка операции delete…………………………...80
Основные правила перегрузки операций…………….80
Примеры программ…………………………………….82
4. Шаблоны функций и классов…………………………....87
4.1. Шаблоны функций……………………………………..87
4.2. Шаблоны классов……………………………………....91
4.3.Компонентные функции параметризованных классов..92
4.4. Примеры программ……………………………………..95
5. Обработка исключительных ситуаций………………….100
5.1. Механизм обработки исключений в С++……………..100
5.2. Получение дополнительной информации
об исключении………………………………………………107
5.3. Определение типа исключения………………………..109
5.4. Иерархия исключений………………………………….111
5.5. Спецификация функций, обрабатывающих
исключения…………………………………………………..112
6. Потоковые классы………………………………………...114
6.1. Библиотека потоковых классов………………………..114
6.2. Ввод-вывод в языке С++……………………………….114
6.3. Стандартные потоки ввода-вывода……………………117
6.4. Форматирование………………………………………..118
6.5. Манипуляторы………………………………………….119
6.6. Ввод-вывод объектов пользовательских классов…….120
6.7. Определение пользовательских манипуляторов……..122
6.8. Пользовательские манипуляторы с параметрами…....124
6.9. Использование макросов для создания
манипуляторов ……………………………………………..125
6.10. Состояние потока…………………………………….126
6.11. Неформатированный ввод-вывод………………..….128
6.12. Файловый ввод-вывод……………………………….132
7. Новые возможности языка С++………………………...138
7.1. Пространство имен………………………………….....138
7.2. Динамическая идентификация типов………………...141
7.3.Безопасное приведение типа…………………………..143
8. Стандартная библиотека шаблонов…………………….146
8.1. Введение в STL…………………………………………146
8.2. Итераторы……………………………………………....148
8.3. Классы-контейнеры…………………………………....150
8.4. Контейнер vector……………………………………….153
8.5. Многомерные массивы…………………………….…..157
8.6. Ассоциативные контейнеры……………………….….160
8.7.Объекты-функции…………………………….…….…..167
8.8. Алгоритмы………………………………………..…….168
Приложение…………………………………………………174
1. Классы С++