
- •Учебное пособие
- •Введение
- •Объектно-ориентированный подход
- •Объектно-ориентированное программирование Абстрактные типы данных
- •Базовые принципы объектно-ориентированного программирования
- •Простейший ввод и вывод
- •Объект cout
- •Манипуляторы hex и oct
- •Другие манипуляторы
- •Объект cin
- •Операторы для динамического выделения и освобождения памяти (new и delete)
- •Базовые конструкции объектно-ориентированных программ Объекты
- •Понятие класса
- •Конструктор копирования
- •Конструктор explicit
- •Указатели на компоненты класса
- •Встроенные функции (спецификатор inline)
- •Организация внешнего доступа к локальным компонентам класса (спецификатор friend)
- •Вложенные классы
- •Static-члены (данные) класса
- •Указатель this
- •Компоненты-функции static и const
- •Proxi-классы
- •Параметры ссылки
- •Независимые ссылки
- •Практические приемы ограничения числа объектов класса
- •Наследование (производные классы)
- •Конструкторы и деструкторы при наследовании
- •Виртуальные функции
- •Абстрактные классы
- •Виртуальные деструкторы
- •Множественное наследование
- •Виртуальное наследование
- •Перегрузка функций
- •Перегрузка операторов
- •Перегрузка бинарного оператора
- •Перегрузка унарного оператора
- •Дружественная функция operator
- •Перегрузка оператора []
- •Перегрузка оператора ()
- •Перегрузка операторов new и delete
- •Преобразование типа
- •Явные преобразования типов
- •Преобразования типов, определенных в программе
- •Шаблоны Параметризированные классы
- •Передача в шаблон класса дополнительных параметров
- •Шаблоны функций
- •Совместное использование шаблонов и наследования
- •Шаблоны класса и friend
- •Некоторые примеры использования шаблона класса Реализация smart-указателя
- •Классы поддерживающие транзакции
- •Задание значений параметров класса по умолчанию
- •Пространства имен
- •Ключевое слово using как директива
- •Ключевое слово using как объявление
- •Псевдоним пространства имен
- •Организация ввода-вывода
- •Состояние потока
- •Строковые потоки
- •Организация работы с файлами
- •Организация файла последовательного доступа
- •Создание файла произвольного доступа
- •Основные функции классов ios, istream, ostream
- •Основы обработки исключительных ситуаций
- •Перенаправление исключительных ситуаций
- •Исключительная ситуация, генерируемая оператором new
- •Генерация исключений в конструкторах
- •Задание собственной функции завершения
- •Спецификации исключительных ситуаций
- •Задание собственного неожиданного обработчика
- •Иерархия исключений стандартной библиотеки
- •Стандартная библиотека шаблонов (stl) Общее понятие о контейнере
- •Общее понятие об итераторе
- •Категории итераторов
- •Основные итераторы
- •Вспомогательные итераторы
- •Операции с итераторами
- •Контейнерные классы Контейнеры последовательностей
- •Контейнер последовательностей vector
- •Контейнер последовательностей list
- •Контейнер последовательностей deque
- •Ассоциативные контейнеры
- •Ассоциативный контейнер multiset
- •Ассоциативный контейнер set
- •Ассоциативный контейнер multimap
- •Ассоциативный контейнер map
- •Адаптеры контейнеров
- •Адаптеры stack
- •Адаптеры queue
- •Адаптеры priority_queue
- •Пассивные и активные итераторы
- •Алгоритмы
- •Алгоритмы сортировки sort, partial_sort, sort_heap
- •Алгоритмы поиска find, find_if, find_end, binary_search
- •Алгоритмы fill, fill_n, generate и generate_n
- •Алгоритмы equal, mismatch и lexicographical_compare
- •Математические алгоритмы
- •Алгоритмы работы с множествами
- •Алгоритмы swap, iter_swap и swap_ranges
- •Алгоритмы copy, copy_backward, merge, unique и reverse
- •Примеры реализации контейнерных классов Связанные списки
- •Реализация односвязного списка
- •Реализация двусвязного списка
- •Реализация двоичного дерева
- •Литература
- •Вопросы по курсу ооп
- •220013, Минск, п.Бровки, 6.
Литература
Дейтел Х., Дейтел П.. Как прграммировать на С++: Пер. с англ. – М.: ЗАО «Издательство БИНОМ», 2001.
Шилд Г. Программирование на Borland C++ для профессионалов. –Мн.: ООО «Попурри» , 1998.
Скляров В.А. Язык С++ и объектно-ориентированное программирование. Мн.: Выш. шк., 1997.
Ирэ П. Объектно-ориентированное программирование с использованием С++. Пер. с англ. – Киев: НИПФ «ДиаСофт Лтд», 1995.
Мейерс С. Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов. Пер. с англ. – М: ДМК Пресс, 2000.
Вопросы по курсу ооп
1. Как обратиться к глобальной переменной , если в функции определена локальная переменная с таким же именем?
2. Чему будут равны значения y и s после выполнения следующего кода
int y = 8;
int &s = y;
s++;
ответ s=9 y=9
3. Что происходит если new не смог выделить требуемую память?
ответ bad_alloc
4.Определить, не компилируя, что напечатает программа
class Lock{
public:
Lock(){ cout << "A"; }
Lock(Lock& B){ cout << "B"; }
~Lock(){ cout << "C"; }
};
int main(int argc, char* argv[])
{
try{
Lock guard;
throw 0; // вариант посложнее throw guard (ответ АВСЕС)
cout << "D";
}
catch( Lock& ){
cout << "E";
}
catch(...){
cout << "X";
}
cout << endl;
return 0;
}
ответ ACX
Вопросы без ответов
- как удалить массив объектов
- что такое полиморфизм
- что такое абстрактный базовый класс
- как определить чисто виртуальную функцию
- зачем нужен виртуальный деструктор
- как реализован виртуальный деструктор в C++
- чем отличаются const char* ptr и char const *ptr
- в каких случаях вызывается конструктор копирования
- в чем потенциальная опасность конструктора копирования по умолчанию
Содержание
Введение 3
Объектно-ориентированный подход 3
Объектно-ориентированное программирование 4
Абстрактные типы данных 4
Базовые принципы объектно-ориентированного программирования 5
Основные достоинства языка С++ 7
Особенности языка С++ 7
Ключевые слова 7
Константы и переменные 8
Операции 8
Типы данных 8
Передача аргументов функции по умолчанию 8
Простейший ввод и вывод 9
Объект cout 9
Манипуляторы hex и oct 9
Другие манипуляторы 10
Объект cin 12
Операторы для динамического выделения и освобождения памяти (new и delete) 12
Базовые конструкции объектно-ориентированных программ 15
Объекты 15
Понятие класса 16
Конструктор копирования 28
Конструктор explicit 30
Указатели на компоненты класса 32
Встроенные функции (спецификатор inline) 33
Организация внешнего доступа к локальным компонентам класса (спецификатор friend) 34
Вложенные классы 39
Static-члены (данные) класса 42
Указатель this 43
Компоненты-функции static и const 46
Proxi-классы 49
Ссылки 51
Параметры ссылки 53
Независимые ссылки 54
Практические приемы ограничения числа объектов класса 54
Наследование (производные классы) 56
Конструкторы и деструкторы при наследовании 60
Виртуальные функции 64
75
Абстрактные классы 75
Виртуальные деструкторы 81
Множественное наследование 83
Виртуальное наследование 85
Перегрузка функций 89
Перегрузка операторов 91
Перегрузка бинарного оператора 92
Перегрузка унарного оператора 96
Дружественная функция operator 97
Особенности перегрузки операции = 98
Перегрузка оператора [] 100
Перегрузка оператора () 103
Перегрузка оператора -> 104
Перегрузка операторов new и delete 105
Преобразование типа 110
Явные преобразования типов 110
dynamic_cast Operator 111
Преобразования типов, определенных в программе 114
Шаблоны 116
Параметризированные классы 116
Передача в шаблон класса дополнительных параметров 118
Шаблоны функций 119
Совместное использование шаблонов и наследования 121
Шаблоны класса и friend 122
Некоторые примеры использования шаблона класса 122
Реализация smart-указателя 122
Классы поддерживающие транзакции 125
Задание значений параметров класса по умолчанию 128
Свойства в С++ 130
Пространства имен 134
Ключевое слово using как директива 135
Ключевое слово using как объявление 136
Псевдоним пространства имен 137
Организация ввода-вывода 137
Состояние потока 141
Строковые потоки 142
Организация работы с файлами 144
Организация файла последовательного доступа 147
Создание файла произвольного доступа 150
Основные функции классов ios, istream, ostream 153
Исключения в С++ 154
Основы обработки исключительных ситуаций 155
Перенаправление исключительных ситуаций 164
Исключительная ситуация, генерируемая оператором new 165
Генерация исключений в конструкторах 167
Задание собственной функции завершения 169
Спецификации исключительных ситуаций 169
Задание собственного неожиданного обработчика 170
Иерархия исключений стандартной библиотеки 171
Стандартная библиотека шаблонов (STL) 172
Общее понятие о контейнере 172
Общее понятие об итераторе 176
Категории итераторов 181
Основные итераторы 181
Вспомогательные итераторы 188
Операции с итераторами 191
Контейнерные классы 191
Контейнеры последовательностей 191
Контейнер последовательностей vector 192
Контейнер последовательностей list 194
Контейнер последовательностей deque 197
Ассоциативные контейнеры 199
Ассоциативный контейнер multiset 199
Ассоциативный контейнер set 201
Ассоциативный контейнер multimap 201
Ассоциативный контейнер map 203
Адаптеры контейнеров 203
Адаптеры stack 204
Адаптеры queue 205
Адаптеры priority_queue 206
Пассивные и активные итераторы 206
Алгоритмы 209
Алгоритмы сортировки sort, partial_sort, sort_heap 210
Алгоритмы поиска find, find_if, find_end, binary_search 211
Алгоритмы fill, fill_n, generate и generate_n 212
Алгоритмы equal, mismatch и lexicographical_compare 213
Математические алгоритмы 214
Алгоритмы работы с множествами 215
Алгоритмы swap, iter_swap и swap_ranges 217
Алгоритмы copy, copy_backward, merge, unique и reverse 217
Примеры реализации контейнерных классов 217
Связанные списки 217
Реализация односвязного списка 217
Реализация двусвязного списка 218
Реализация двоичного дерева 223
Литература 232
Вопросы по курсу ООП 232
Св. план 2003, резерв
Учебное издание
Луцик Юрий Александрович,
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ.
ЯЗЫК С++
Учебное пособие
по курсу «Объектно-ориентированное программирование»
для студентов специальности «Вычислительные машины,
системы и сети» всех форм обучения
Редактор Т.А. Лейко
Корректор Е.Н. Батурчик
Компьютерная верстка
Подписано в печать . .2003. Формат 60х84 1/16. Бумага офсетная.
Гарнитура Times New Roman. Печать ризографическая. Усл. печ. л. .
Уч.- изд. л. 12,0. Тираж 200 экз. Заказ .
Издатель и полиграфическое исполнение:
Учреждение образования
«Белорусский государственный университет информатики и радиоэлектроники»
Лицензия ЛП № 156 от 05.02. 2001.
Лицензия ЛВ № 509 от 03.08. 2001.