ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
Омский государственный университет
им.
Институт математики и информационных технологий
Кафедра математической логики
и логического программирования
«Утверждаю»
Проректор по учебной работе
______________
«______»_____________200__ г.
Программа дисциплины
«Языки программирования и методы трансляции»
входит в число обязательных дисциплин федерального компонента
к следующим образовательным профессиональным программам
подготовки специалистов и бакалавров
Специальность | Код специальности | Форма обучения |
Математика | 010101.65 | Очная |
Прикладная математика и информатика | 010501.65 | Очная |
Направление | Код направления | Форма обучения |
Математика | 010100.62 | Очная |
Прикладная математика и информатика | 010500.62 | Очная |
Математика. Прикладная математика | 010200.62 | Очная |
Математика. Компьютерные науки | 010300.62 | Очная |
Омск – 2007 г.
ЛИСТ СОГЛАСОВАНИЯ РАБОЧЕЙ ПРОГРАММЫ
Программа дисциплины «Языки программирования и методы трансляции»
разработана зав. кафедрой МЛЛП ОмГУ к. ф.-м. н.
Программа рассмотрена и одобрена на заседании кафедры
математической логики и логического программирования
(протокол № 2 от «28» сентября 2007 г.)
Программа разработана в соответствии с Государственным образовательным стандартом высшего профессионального образования РФ по следующим специальностям:
«Математика»,
«Прикладная математика и информатика»
и направлениям:
«Математика»,
«Прикладная математика и информатика»,
«Математика. Прикладная математика»,
«Математика. Компьютерные науки»
и согласована с факультетом, осуществляющими профессиональную подготовку по этим специальностям и направлениям.
Директор института
математики и информационных технологий
Распределение общего объема часов по видам учебной деятельности
Специальность «Математика»
Курс | Семестр | Объем часов (по видам работ) | ||||||||||
Аудиторные занятия | Самостоятельная работа студентов | |||||||||||
Всего | Всего | |||||||||||
Лекции | Практи-ческие занятия | Семинары | Лабораторные занятия | Другие виды | Курсовая работа | Реферат | Индивидуальные задания | Другие виды | ||||
2 | 3 | 54 | 36 | 18 | 28 | 27 | ||||||
2 | 4 | 51 | 34 | 17 | 25 | 26 |
Общая трудоемкость дисциплины: 158 часов.
Формы промежуточного контроля: зачет, экзамен. Формы текущего контроля: контрольные работы.
Остальные специальности и направления
Курс | Семестр | Объем часов (по видам работ) | ||||||||||
Аудиторные занятия | Самостоятельная работа студентов | |||||||||||
Всего | Всего | |||||||||||
Лекции | Практи-ческие занятия | Семинары | Лабораторные занятия | Другие виды | Курсовая работа | Реферат | Индивидуальные задания | Другие виды | ||||
2 | 3 | 54 | 36 | 18 | 27 | 27 | ||||||
2 | 4 | 51 | 34 | 17 | 26 | 26 |
Общая трудоемкость дисциплины: 158 часов.
Формы промежуточного контроля: зачет, экзамен. Формы текущего контроля: контрольные работы.
Цели и задачи дисциплины.
Требования к уровню освоения содержания дисциплины
Рабочая программа учебной дисциплины предназначена для реализации государственных требований к минимуму содержания и уровню подготовки выпускников по математическим специальностям и направлениям. Учебная дисциплина формирует основные знания о языках и технологиях программирования, абстрактных типах данных и основных алгоритмах работы с ними, устройстве и функционировании компьютера.
В результате изучения дисциплины студент должен:
иметь представление:
- о значении и областях применения данной дисциплины;
знать:
- синтаксис и семантику языка программирования С/С++ основы объектно-ориентированного подхода к программированию; технологии проектирования программ; основные абстрактные типы данных и связанные с ними алгоритмы; основные фазы процесса трансляции, связанные с ними понятия и алгоритмы;
уметь:
- применять компьютеры в научных исследованиях в различных областях математики; разрабатывать алгоритмы и программы в виде консольных приложений; документировать текст программы для последующего сопровождения.
Дисциплина входит в цикл общих математических и естественнонаучных дисциплин (специальность 010100 «Математика», направления 510100 «Математика» и 511200 «Математика. Прикладная математика») и в цикл общепрофессиональных дисциплин (специальность 010200 «Прикладная математика и информатика», направления 510200 «Прикладная математика и информатика» и 511800 «Математика. Компьютерные науки»).
Для изучения данной дисциплины студенты должны освоить курс «ЭВМ и информатика». В свою очередь, дисциплина «Языки программирования и методы трансляции» служит базовой для всех дисциплин программистского цикла («Системное и прикладное программное обеспечение», «Вычислительные методы», «Сети и системы телекоммуникаций», «Параллельное программирование», «Технологии разработки программного обеспечения» и др.).
Учебный процесс по дисциплине «Языки программирования и методы трансляции» тематически и организационно связан с прохождением практикума на ЭВМ (4 часа лабораторных работ в неделю).
В процессе изучения дисциплины используется следующее программное обеспечение: инструментальная среда Microsoft Visual . и библиотека MSDN Library.
Тематический план
(с распределением общего бюджета времени в часах)
Специальность «Математика»
Курс | Семестр | Раздел дисциплины, Содержание | Всего | Аудиторные занятия (часов) | Самостоятельная работа студента | Формы контроля (промежуточного, текущего, итогового) | ||
Лекции | Семинарские (практические) занятия | Лабораторные занятия | ||||||
2 | 3 | Основы программирования на языке C/C++ (без классов) | 32 | 12 | 6 | 14 | контр. работа, зачет | |
2 | 3,4 | Классические структуры данных и алгоритмы | 40 | 20 | 12 | 13 | контр. работа, зачет | |
2 | 3,4 | Основы методов трансляции | 21 | 12 | 4 | 5 | контр. работа, зачет | |
2 | 4 | Основные принципы ООП. Классы и объекты в С++. | 32 | 10 | 6 | 11 | контр. работа, зачет | |
2 | 4 | Принцип наследования в ООП и его реализация в языке С++. | 12 | 6 | 2 | 4 | контр. работа, зачет | |
2 | 4 | Динамический полиморфизм. | 14 | 8 | 2 | 4 | контр. работа, зачет | |
2 | 4 | Шаблонные (template) классы и функции. | 7 | 2 | 3 | 2 | контр. работа, зачет |
Остальные специальности и направления
Курс | Семестр | Раздел дисциплины, Содержание | Всего | Аудиторные занятия (часов) | Самостоятельная работа студента | Формы контроля (промежуточного, текущего, итогового) | ||
Лекции | Семинарские (практические) занятия | Лабораторные занятия | ||||||
2 | 3 | Основы программирования на языке C/C++ (без классов) | 32 | 12 | 6 | 14 | контр. работа, зачет | |
2 | 3,4 | Классические структуры данных и алгоритмы | 40 | 20 | 12 | 12 | контр. работа, зачет | |
2 | 3,4 | Основы методов трансляции | 21 | 12 | 4 | 5 | контр. работа, зачет | |
2 | 4 | Основные принципы ООП. Классы и объекты в С++. | 32 | 10 | 6 | 12 | контр. работа, зачет | |
2 | 4 | Принцип наследования в ООП и его реализация в языке С++. | 12 | 6 | 2 | 4 | контр. работа, зачет | |
2 | 4 | Динамический полиморфизм. | 14 | 8 | 2 | 4 | контр. работа, зачет | |
2 | 4 | Шаблонные (template) классы и функции. | 7 | 2 | 3 | 2 | контр. работа, зачет |
Содержание дисциплины
Программа лекций
Раздел | Содержание лекции | Кол-во часов |
I семестр | ||
1 | Общий вид программы на С. Объявления и определения. Базовые типы данных. | 2 |
1 | Основные управляющие инструкции. | 2 |
1 | Массивы, структуры и объединения. Примеры прикладных типов данных на их основе. | 2 |
1 | Указатели и ссылки. Арифметика указателей. | 2 |
1 | Потоковый ввод/вывод. Корректность ввода. | 2 |
1 | Модульная организация программ. Пространства имен. Пример программы в модульном стиле. | 2 |
Итого по разделу: | 12 | |
2 | Реализация однонаправленного списка средствами С++. | 2 |
2 | Хэш-таблица. Реализация на базе указателей | 2 |
2 | Понятие дерева. Основная терминология. Алгоритмы обхода дерева. Особенности проектирования рекурсивных алгоритмов. | 3 |
2 | Бинарные деревья поиска. Алгоритмы поиска, вставки и удаления элемента. | 2 |
2 | Понятие сбалансированного дерева. Идеально сбалансированные и АВЛ-деревья. Вставка и удаление элемента в АВЛ-дерево. | 3 |
2 | Деревья цифрового поиска и trie-деревья. Алгоритмы вставки и удаления элемента. Сравнение различных типов деревьев. | 2 |
2 | Б-деревья. Алгоритмы поиска, вставки и удаления. | 4 |
Итого по разделу: | 16 | |
3 | Сущность трансляции. Основные этапы. | 1 |
3 | Основы лексического анализа. Регулярные выражения. | 2 |
3 | Конечные автоматы. Построение автомата по заданному регулярному выражению. Некоторые преобразования автоматов. | 3 |
Итого по разделу: | 8 | |
| Всего I семестр: | 36 |
II семестр | ||
4 | Эволюция технологий программирования. Сущность ООП | 2 |
4 | Классы и объекты в С++, их основные элементы. Конструкторы и деструкторы. Конструкторы копирования. | 2 |
4 | Совместное использование объектов с массивами, структурами, указателями. Указатель this. | 1 |
4 | Перегрузка функций как частный случай полиморфизма. | 1 |
4 | Перегрузка операторов. Операторы присваивания, ввода/вывода, ( ) и [ ], преобразования типов. | 2 |
4 | Константные объекты и методы. | 1 |
4 | Статические переменные, поля и методы. | 1 |
Итого по разделу: | 10 | |
5 | Сущность наследования. Реализация наследования средствами С++. | 1 |
5 | Порядок вызова конструкторов и деструкторов. Области видимости при наследовании. | 1 |
5 | Множественное наследование. Виртуальные базовые классы. Пример иерархии классов. | 2 |
Итого по разделу: | 4 | |
6 | Сущность динамического полиморфизма. Свойство указателей на базовый класс в С++. Виртуальные функции в классах. Раннее и позднее связывание указателей. | 2 |
6 | Чисто виртуальные функции. Абстрактные классы. Пример иерархии с абстрактными классами. | 3 |
6 | Механизм RTTI. | 1 |
6 | Обработка исключительных ситуаций. | 2 |
Итого по разделу: | 8 | |
7 | Шаблонные структуры данных. Порядок компиляции. | 2 |
Итого по разделу: | 2 | |
2 | Абстрактный тип данных множество. Реализация множества на базе дерева. | 4 |
Итого по разделу: | 2 | |
3 | Формальные грамматики. Вывод в грамматике. Классификация Хомского. | 2 |
3 | Контектно-свободные грамматики. Деревья разбора. Однозначность грамматик. | 2 |
3 | Алгоритмы синтаксического разбора с возвратами. | 2 |
Итого по разделу: | 6 | |
| Всего II семестр: | 34 |
ВСЕГО: | 70 |
Программа семинарских занятий
Раздел | Содержание занятия | Кол-во часов |
I семестр | ||
1 | Основы программирования на С. Работа с массивами фиксированной длины. | 2 |
1 | Работа с динамическими массивами. Сортировка массива. | 2 |
1 | Работа с многомерными массивами. Пример программы, работающей с матрицами. | 2 |
2 | Реализация списков средствами С. | 2 |
2 | Реализация бинарного дерева. Алгоритмы обхода дерева. | 2 |
2 | Двоичные деревья поиска. Алгоритмы поиска, вставки и удаления элемента. | 2 |
2 | Сбалансированные деревья. Вставка и удаление элемента. | 2 |
2 | Б-деревья. | 2 |
3 | Регулярные выражения и конечные автоматы. | 2 |
II семестр | ||
4 | Классы в С++. Поля и методы, доступ к ним. Дружественные функции. Конструктор как средство инициализации. | 2 |
4 | Классы с использованием динамической памяти. Конструкторы и деструкторы. Конструктор копирования. | 2 |
4 | Перегрузка операторов. Классы со своими операторами присваивания и ввода/вывода. | 2 |
5 | Наследование. Построение иерархии классов. | 2 |
6 | Использование виртуальных функций и механизма позднего связывания. | 2 |
7 | Шаблонные типы данных | 2 |
2 | Абстрактный тип данных множество. Реализация итератора для множества. | 2 |
3 | Формальные грамматики и языки, ими определяемые. Примеры синтаксического разбора. | 3 |
Требования к уровню освоения программы и формы текущего
промежуточного и итогового контроля
Форма промежуточного контроля: зачет (3 семестр) и экзамен (4 семестр).
Зачет проводится в письменной форме в виде итоговой контрольной работы. Задание состоит из 18 задач. Каждая правильно решенная задача оценивается 1 балл. Критерии выставления оценки:
зачтено 7-18 баллов
не зачтено 0-6 баллов
Экзамен проводится в письменной форме в виде итоговой контрольной работы. Задание состоит из 20 задач. Каждая правильно решенная задача оценивается 1 балл. Критерии выставления оценки:
отлично 17-20 баллов
хорошо 12-16 баллов
удовлетворительно 07-11 баллов
неудовлетворительно менее 7 баллов.
Положительная оценка может быть повышена с учетом результатов прохождения студентом практикума на ЭВМ.
Текущий контроль осуществляется в виде контрольных работ. Темы контрольных работ:
3 семестр:
1. Одномерные динамические массивы (С-строки).
2. Двумерные динамические массивы.
3. Двунаправленные списки.
4. Обходы бинарных деревьев.
5. Деревья двоичного поиска.
6. Сбалансированные деревья двоичного поиска.
4 семестр:
1. Классы и объекты, инициализация объектов.
2. Классы с динамической памятью, конструктор копирования.
3. Перегрузка операторов.
4. Кольцевой буфер на базе массива.
5. Наследование.
6. Шаблонные классы и функции.
Контрольные работы проводятся на семинарских занятиях в течение 10-15 минут. Каждая работа оценивается по трехбалльной шкале:
3 – поставленная задача решена,
2 – задача в целом решена с негрубыми ошибками,
1 – ход решения верный, но имеются грубые ошибки,
0 – нет решения или оно неверное.
Полученные студентом оценки суммируются и образуют текущий рейтинг студента.
Учебно-методическое обеспечение
Литература
Основная
№ | Наименование | Число экз. |
1 | , . C/C++. Структурное программирование: практикум. – СПб. : Питер, 2007. | 100 |
2 | , . C++. Объектно-ориентированное программирование : практикум. – СПб. : Питер, 2006. | 100 |
Дополнительная
3. Язык программирования С++. – СПб: Невский диалект, М: Бином, 1999 (3-е издание).
4. Объектно-ориентированное программирование на языке С++. – М.: Питер, 2004.
5. , Дж. Как программировать на С++. – М.: Бином: 2006.
6. , . Программирование на языке Си: Учеб. пособие для вузов. – М.: Финансы и статистика, 1998.
7. . Язык СИ++: Учеб. пособие для - 2-е изд., перераб. и доп. – М.: Финансы и статистика, 1996.
8. Алгоритмы и структуры данных. – СПб.: Невский диалект. 2001.
9. , Лебедев для математиков. - М.: Наука, 1988.
10. Искусство программирования. ТТ.1-3. – М., СПб.: Вильямс, 2000.
11. Хопкрофт Дж., Структуры данных и алгоритмы. – М.: Вильямс, 2003.
12. Р. Седжвик. Фундаментальные алгоритмы на С. – СПб.: DiaSoft, 2003.
Методические указания (рекомендации) преподавателю
Примерный перечень задач для разбора на семинарских занятиях
3 семестр
Занятие 1. Работа с одномерным массивом чисел (ввод и вывод массива, поиск элемента, бинарный поиск в предположении, что массив упорядоченный).
Занятие 2. Сортировка массива (методом включения, выбора или «пузырьком»).
Занятие 3. Работа с двумерными массивами (создание/разрушение квадратной матрицы чисел, матричная арифметика, функция, которая по матрице создает новую, полученную вычеркиванием строки и столбца).
Занятие 4. Реализовать L1-список строк.
Занятие 5. Реализовать бинарное дерево чисел (для сильной группы – строк), функции инициализации и удаления дерева, вывод элементов дерева в поток, поиск поддерева.
Занятие 6. Реализовать алгоритмы поиска (итерационный вариант), вставки и удаления в упорядоченное бинарное дерево поиска чисел.
Занятие 7. Реализовать алгоритм удаления элемента из сбалансированного дерева чисел.
Занятие 8. Реализовать частотный словарь слов на базе сильно ветвящегося trie-дерева.
Занятие 9. Зачетная письменная работа.
4 семестр
Занятие 1. Реализация простых классов без динамической памяти:
класс «Точка на плоскости», методы: конструкторы, доступ к полям, расстояние между точками, поиск точки, симметричной данной относительно начала координат, сдвиг точки на заданный вектор;
класс «Вектор» (двумерный), методы: конструкторы по двум точкам, по четырем координатам, скалярное и векторное произведения.
Занятие 2. Реализация класса «Строка символов». Методы: доступ к символам, вычисление длины строки. Обсудить со студентами необходимость деструктора и конструктора копирования.
Занятие 3. Реализовать класс «Многочлен от одной переменной» на базе массива. Предусмотреть операторы суммы, произведения многочленов, оператор ( ) для вычисления значения при заданном аргументе. Обсудить со студентами отличия оператора как метода и как дружественной функции.
Занятие 4. Реализовать простую иерархию классов (например, человек – студент – студент математического факультета). Обсудить порядок вызовов конструкторов и деструкторов, различные типы наследования.
Занятие 5. Реализовать иерархию классов. Обсудить области видимости имен в членах иерархии, различие между разделами public, private и protected.
Занятие 6. Реализовать иерархию классов с абстрактными классами (например, функция – конкретные функции). Предусмотреть ряд чисто виртуальных функций (для класса «Функция» это может быть вычисление значения в точке) и заместить их в наследниках.
Занятие 7. Реализовать шаблонный класс «Множество» на базе массива (с итератором).
Занятия 8-9. Использование STL: синтаксический разбор формулы алгоритмом Дейкстры.
Методические указания для студентов
Необходимо регулярно и методично изучать теоретический материал и выполнять задания для самостоятельной работы. При возникновении непонятных мест нужно консультироваться с преподавателем.
Основная форма самостоятельной работы студентов – изучение теоретического материала и решение домашних работ. Необходимые теоретические сведения можно получить из литературы, указанной ниже.
Методические указания по организации
внеаудиторной самостоятельной работы студентов
Специальность «Математика»
Тема, раздел | Всего часов | Задания для самостоятельной работы | Список литературы для подготовки | Форма контроля |
Основы программирования на языке C/C++ (без классов) | 14 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1], [4-8] | Контрольная работа. Зачет. Экзамен. |
Классические структуры данных и алгоритмы | 13 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2], [9-12] | Контрольная работа. Зачет. Экзамен. |
Основы методов трансляции | 5 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [2], [4-8] | Контрольная работа. Зачет. Экзамен. |
Основные принципы ООП. Классы и объекты в С++. | 11 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [2], [4-8] | Контрольная работа. Зачет. Экзамен. |
Принцип наследования в ООП и его реализация в языке С++. | 4 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2] | Контрольная работа. Зачет. Экзамен. |
Динамический полиморфизм. | 4 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2] | Контрольная работа. Зачет. Экзамен. |
Шаблонные (template) классы и функции. | 2 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2] | Зачет. Экзамен. |
Остальные специальности и направления
Тема, раздел | Всего часов | Задания для самостоятельной работы | Список литературы для подготовки | Форма контроля |
Основы программирования на языке C/C++ (без классов) | 14 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1], [4-8] | Контрольная работа. Зачет. Экзамен. |
Классические структуры данных и алгоритмы | 12 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2], [9-12] | Контрольная работа. Зачет. Экзамен. |
Основы методов трансляции | 5 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [2], [4-8] | Контрольная работа. Зачет. Экзамен. |
Основные принципы ООП. Классы и объекты в С++. | 12 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [2], [4-8] | Контрольная работа. Зачет. Экзамен. |
Принцип наследования в ООП и его реализация в языке С++. | 4 | Изучение монографий и учебных пособий. Выполнение домашних работ. | [1,2] | Контрольная работа. Зачет. Экзамен. |
Вопросы для подготовки к зачету (экзамену).
Для подготовки к сдаче зачета за третий семестр используйте вопросы 1.1 – 1.8 и 2.1 – 2.8.
Для подготовки к экзамену используйте весь список вопросов.
Раздел 1. Основы программирования на языке C/C++ (без классов).
1.1. Общий вид программы на С. Комментарии. Объявления констант и переменных. Базовые типы данных. Объявления и определения функций.
1.2. Основные операторы. Базовые конструкции для записи алгоритмов. Простейшие типы данных. Области видимости имен.
1.3. Массивы, структуры и объединения. Примеры прикладных структур данных, составленных на базе структур и массивов.
1.4. Указатели. Основные понятия и приемы работы. Связь указателей с массивами. Арифметика указателей. C-строки.
1.5. Ссылки. Передача параметров в функции по ссылке и по значению. Ссылки в качестве возвращаемого значения функции. Передача параметров в программу.
1.6. Ввод/вывод из библиотеки iostream. Буферизация. Манипуляторы. Файловый ввод/вывод (файловые потоки).
1.7. Корректность ввода. Организация обработки ошибок.
1.8. Технология модульного программирования. Модуль в языке C. Пространства имен. Пример программы, оформленной в модульном стиле (прикладная структура данных на базе списка).
Раздел 2. Некоторые динамические структуры данных.
2.1. Хэш-таблица. Реализация на базе указателей.
2.2. Дерево. Основная терминология, связанная с деревьями.
2.3. Рекурсивные и итерационные алгоритмы.
2.4. Обход дерева в разных направлениях. Алгоритмы работы с деревьями как пример рекурсивных алгоритмов.
2.5. Бинарные деревья поиска. Поиск, вставка и удаление элемента.
2.6. Сбалансированные деревья. Идеально сбалансированные и АВЛ-деревья. Алгоритмы вставки и удаления.
2.7. Б-деревья. Схемы алгоритмов вставки и удаления.
2.8. Структуры, основанные на поразрядном поиске: деревья цифрового поиска и trie-деревья.
2.9. Множества. Основные методы множества. Различные варианты реализации множеств. Подробное обсуждение реализации множества на базе дерева.
Раздел 3. Основы методов трансляции
3.1. Общие принципы построения компиляторов. Основные этапы трансляции.
3.2. Основы лексического анализа. Регулярные выражения и определения.
3.3. Конечные автоматы. Детерминированные и недетерминированные конечные автоматы (ДКА и НКА). Переход от НКА к эквивалентному ДКА. Построение НКА, распознающего заданное регулярное выражение. Оптимизация автоматов. Программная реализация конечных автоматов.
3.4. Формальные грамматики и языки, ими определяемые. Иерархия Хомского.
3.5. Контекстно-свободные грамматики. Деревья разбора.
3.6. Схемы нисходящего и восходящего алгоритмов разбора с возвратами.
Раздел 4. Основные принципы ООП. Классы и объекты в С++.
4.1. Эволюция технологии программирования. Основные особенности объектного и объектно-ориентированного программирования.
4.2. Классы и объекты с C++. Поля и методы класса. Открытая и закрытая части. Оператор расширения видимости. Дружественные функции. Реализация принципа инкапсуляции в классах С++.
4.3. Использование ссылок в классах. Встраиваемые (inline) функции.
4.4. Константные объекты. Константные методы.
4.5. Перегрузка функций как простейшая форма полиморфизма.
4.6. Конструкторы и деструкторы класса. Конструктор копирования.
4.7. Массивы объектов. Указатели на объект. Указатель this.
4.8. Общие принципы перегрузки операторов. Операторы как члены класса и как дружественные функции.
4.9. Перегрузка оператора присваивания. Ортодоксальная каноническая форма класса.
4.10. Перегрузка операторов ввода/вывода.
4.11. Статические объекты. Статические поля и методы в классах.
Раздел 5. Принцип наследования в ООП и его реализация в С++.
5.1. Необходимость иерархичного построения классов и объектов в больших программах.
5.2. Наследование классов в С++.
5.3. Порядок вызовов конструкторов и деструкторов.
5.4. Замещение методов. Отличие замещения от перегрузки.
5.5. Множественное наследование. Виртуальные базовые классы.
Раздел 6. Динамический полиморфизм.
6.1. Указатели на объекты в связи с наследованием.
6.2. Раннее и позднее связывание указателей.
6.3. Виртуальные функции в классах. Виртуальные деструкторы.
6.4. Чисто виртуальные методы. Абстрактные классы.
6.5. Пример иерархии с абстрактными классами и виртуальными функциями.
6.6. Механизм RTTI (Run Time Type Information).
6.7. Обработка исключительных ситуаций.
Раздел 7. Шаблонные (template) классы и функции.
7.1. Преимущества шаблонных структур данных и алгоритмов.
7.2. Реализация средствами языка С++.
7.3. Механизм компиляции программы с шаблонами.


