- •Список литературы по модулю
- •История языка C++
- •Основные особенности C++
- •Простые расширения языка C
- •Объявление переменных ссылочного типа
- •Инициализация и использование ссылок
- •Ссылки в формальных параметрах функций
- •Ссылки как возвращаемые значения функций
- •Константные ссылки
- •Объявление класса
- •Секции в объявлении класса
- •Пример: секции в объявлении класса
- •Объявление полей
- •Определения статических полей
- •Объявление методов
- •Виртуальные и абстрактные методы
- •Объявление конструкторов
- •Пример: объявление конструкторов
- •Создание объектов в динамической памяти
- •Создание массивов в динамической памяти
- •Удаление объектов и массивов
- •Объявление деструктора
- •Пример: объявление деструктора
- •Объекты в автоматической памяти
- •Пример: автоматический вызов деструктора
- •Пример: автоматический вызов деструктора (продолжение)
- •Объекты в глобальной памяти
- •Объекты в полях других объектов
- •Пример: объекты в полях других объектов
- •Проблема копирования объектов
- •Объявление конструктора копий
- •Перегруженная операция присваивания
- •Основной способ наследования в C++
- •Пример: одиночное наследование
- •Переопределение методов
- •Пример: переопределение методов
- •Динамическое приведение типов
- •Пример: динамическое приведение типов не всегда допустимо
- •Пример: динамическое приведение типов
- •private- и protected-наследование
- •Наследование от нескольких базовых классов
- •Иерархия наследования и классы противоречия
- •Неоднозначности в противоречивых иерархиях
- •Разрешение неоднозначностей
- •Основная проблема противоречивых иерархий
- •Виртуальное наследование
- •Пример: виртуальное наследование
- •Понятие шаблона
- •Типовые формальные параметры шаблона
- •Нетиповые формальные параметры шаблона
- •Шаблонные формальные параметры шаблона
- •Значения параметров шаблона по умолчанию
- •Зависимые идентификаторы в шаблоне
- •Инстанциация шаблонов
- •Выведение фактических параметров при инстанциации шаблона функции
- •Требования к фактическим параметрам шаблонов
- •Специализация шаблона функции
- •Пример: специализация шаблона функции
- •Пример: перегрузка имеет больший приоритет, чем специализация
- •Cпециализация шаблона класса
- •Пример: специализация шаблона класса
- •Частичная специализация шаблона класса
- •Вычисления во время компиляции
- •Пример: возведение числа в степень
- •Понятие перегрузки операций
- •Ассортимент перегружаемых операций
- •Перегрузка операции присваивания
- •Операция присваивания возвращает левое значение
- •Составные операции присваивания
- •Перегрузка бинарных арифметических операций
- •Перегрузка операций сравнения
- •Перегрузка операций с помощью функций
- •Перегрузка унарных операций
- •Перегрузка операции приведения типа
- •Исключения
- •Оператор throw
- •Пример: оператор throw
- •Синтаксис try- и catch-блоков
- •Пример: перехват исключения std::bad_alloc
- •Жизненный цикл объектов-исключений
- •Пример 1: жизненный цикл объектов-исключений
- •Пример 2: жизненный цикл объектов-исключений
- •Пример 3: жизненный цикл объектов-исключений
- •Пример: уничтожение автоматических объектов в процессе передачи исключения в catch-блок
- •Перехват исключений в инициализаторах конструкторов
- •Пример: перехват исключений в инициализаторах конструкторов
- •Спецификатор throw в заголовках функций
- •Пример 1: спецификатор throw
- •Пример 2: спецификатор throw
- •Спецификатор throw и переопределение виртуальных методов
- •Создание классов исключений
- •Пример: создание классов исключений
Объектно-ориентированное программирование на C++
С.Ю. Скоробогатов
Весна 2015
1 / 99
Список литературы по модулю
Базовые
сведения
Введение
Ссылки
Классы
Поля и методы
Конструкторы
Создание и уничтожение объектов Копирование
объектов
Одиночное
наследование
Множественное наследование
Обобщённое |
программирова- |
ние |
Перегрузка
операций
Исключения
1.Слайды лекций. www.dropbox.com/s/sls69hmat8wli36/module_cpp.pdf
2.Б. Страуструп. Язык программирования C++. Специальное издание. – М.: Бином, 2011. www.dropbox.com/s/xg7ax2qpbhwbw58/cppbook.djvu
3.Б. Страуструп. Дизайн и эволюция C++. – М.: ДМК Пресс; Спб.: Питер, 2006. www.dropbox.com/s/cflejuy2wx7he6r/cppdesign.djvu
2 / 99
История языка C++
Базовые
сведения
Введение
Ссылки
Классы
Поля и методы
Конструкторы
Создание и уничтожение объектов Копирование
объектов
Одиночное
наследование
Множественное
наследование
Обобщённое
программирова- ние
Перегрузка
операций
Исключения
|
Основные этапы: |
|
|
Начало 80-х: C with classes, трансля- |
|
|
тор cfront. |
|
|
1983: |
переименование в C++, вирту- |
|
альные функции, перегрузка функций |
|
|
и операторов, ссылки. |
|
|
1985: |
выход книги Страуструпа |
Б. Страуструп |
The C++ Programming Language. |
1989: C++ 2.0 (множественное наследование, абстрактные классы, обобщённые типы, статические функции-члены, функции-константы и защищённые члены).
1998: стандарт ISO/IEC 14882:1998 – С++98. 2003: стандарт ISO/IEC 14882:2003.
2011: стандарт ISO/IEC 14882:2011 – C++11 (выведение типов, расширенный for, замыкания).
3 / 99
Основные особенности C++
Базовые
сведения
Введение
Ссылки
Классы
Поля и методы
Конструкторы
Создание и уничтожение объектов Копирование
объектов
Одиночное
наследование
Множественное наследование
Обобщённое |
программирова- |
ние |
Перегрузка
операций
Исключения
Совместимость с C: C++ содержит в себе язык C как подмножество (с незначительными изменениями, связанными с более строгим контролем типов);
Поддержка ООП: в C++ реализованы классы с поддержкой множественного наследования, перегрузки операций и обобщённого программирования;
Небезопасность: в C++ ошибки при работе с памятью могут привести к непредсказуемой работе программы;
Ручное управление памятью: автоматическое управле-
ние памятью в C++ не реализовано из принципиальных соображений;
Объекты не только в куче: в отличие от языка Java, в C++ объекты не обязаны размещаться на верхнем уровне кучи – они могут «жить» в локальных и глобальных переменных, в элементах массивов, в полях других объектов.
4 / 99
Программа «Hello, World»
Базовые
сведения
Введение
Ссылки
Классы
Поля и методы
Конструкторы
Создание и уничтожение объектов Копирование
объектов
Одиночное
наследование
Множественное наследование
Обобщённое |
программирова- |
ние |
Программа на C++ (hello.cpp):
1 # include < iostream >
2
3 using namespace std ;
4
5int main ()
6{
7 |
|
cout << |
" Hello , world !" << endl ; |
8 |
|
return 0; |
|
9 |
} |
|
|
|
Компиляция: |
|
|
|
|
|
|
|
|
g ++ -o hello |
hello . cpp |
|
|
|
|
Перегрузка
операций
Исключения
Запуск:
./ hello
5 / 99