C++
Теория
- I. Базовый курс C++
- 1. Общие сведения о языке C++
- 2. Базовые понятия языка C++
- 2.1. Базовые типы данных C++
- 2.2. Идентификаторы, зарезервированные слова, литералы, управляющие последовательности
- 2.3. Понятие переменной. Объявление переменной. Операция расширения области видимости :: . Выделение памяти для переменной. Константы
- 2.4. Понятие выражения. Операция присваивания. Преобразование и приведение типов. Инициализация. Унифицированная инициализация
- 2.5. Спецификатор constexpr. Отличия спецификатора constexpr от const. Примеры
- 3. Операции
- 4. Управляющие операторы
- 5. Массивы и строки символов
- 6. Классы для работы со строками символов
- 7. Указатели. Ссылки
- 8. Функции. Рекурсия
- 8.2. Функции и массивы. Передача одномерного и многомерного массива в функцию. Передача структуры и класса в функцию
- 8.3. Аргументы по умолчанию в функциях
- 8.4. Перегрузка функций. Перегрузка функций в классах. Перегрузка конструкторов класса. Доступ к перегруженной функции по указателю. Примеры
- 8.5. Передача в функцию константных параметров. Возврат из функции константы
- 8.6. Обобщения в функциях. Шаблонная функция. Ключевые слова template, class, typename. Явная «перегрузка» шаблонной функции
- 8.7. Рекурсия. Примеры решения задач. Преимущества и недостатки
- 9. Структуры. Объединения. Перечисления
- 9.3. Работа с managed-структурами в среде CLR. Квалификаторы ref и value. Объявление структурных переменных. Массивы managed-структурных переменных. Инициализация managed-структур
- 9.4. Структуры и функции. Передача структуры в функцию в среде CLR. Возврат структуры из функции
- 9.5. Структуры. Использование методов в структурах. Конструкторы в структурах
- 9.6. Структуры и наследование. Структуры и полиморфизм. Абстрактная структура. Перегрузка операторов в структурах. Статические методы в структурах
- 9.7. Объединения. Ключевое слово union. Примеры объявления и использования объединений
- 9.8. Перечисления. Ключевое слово enum. Преимущества использования перечислений. Примеры
- 9.9. Битовые поля в структурах
- 10. Динамическое выделение памяти
- 11. Препроцессор. Директивы препроцессора
- II. Объектно-ориентированное программирование на C++
- 2. Классы
- 2.1. Понятие класса. Объявление класса. Объект класса. Классы в среде CLR. Инкапсуляция данных в классе
- 2.2. Специальные функции класса
- 2.2.1. Конструктор класса. Конструктор по умолчанию. Параметризированные конструкторы. Примеры классов, содержащих конструкторы
- 2.2.2. Конструктор копирования. Примеры использования. Передача объекта класса в функцию. Возврат объекта класса из функции
- 2.2.3. Деструкторы. Определение деструктора. Общедоступные и приватные деструкторы. Примеры. Отличия между конструкторами и деструкторами
- 2.2.4. Заданные по умолчанию методы. Удаленные методы. Ключевые слова default, delete
- 2.2.5. Конструктор переноса и оператор переноса
- 2.3. Члены данных класса
- 2.3.1. Использование членов-данных класса. Статические (static) члены данных в классе. Статические члены данных для native-классов и managed-классов в среде CLR
- 2.3.2. Объекты класса как члены данных класса. Инициализация внутреннего объекта класса с помощью конструктора. Примеры
- 2.3.3. Ссылки на объект класса. Доступ к объекту класса по ссылке. Ссылки как члены данных класса. Примеры
- 2.4. Функции-члены класса
- 2.4.1. Виды функций-членов класса. Обычные функции-члены. Статические (static) функции-члены класса. Примеры использования
- 2.4.2. Константные (const) функции-члены класса. Функции-члены класса volatile
- 2.4.3. Функции класса, объявленные с константным (const) указателем this и непостоянным (volatile) указателем this
- 2.4.4. Inline функции-члены класса. Ключевое слово inline
- 2.5. Инкапсуляция
- 2.6. Классы памяти, которые могут объявляться при работе с классами и объектами классов. Ключевые слова register, extern, static, mutable
- 2.7. Managed и unmanaged классы в Visual C++. Обзор особенностей работы. Пример реализации managed и unmanaged классов
- 2.8. «Друзья» класса. «Дружественные» классы и функции. Ключевое слово friend. Примеры
- 2.9. Шаблоны классов
- 2.10. Классы и массивы
- 2.10.1. Массивы объектов в unmanaged и managed классах. Примеры. Массив unmanaged—указателей (*) на объект класса
- 2.10.2. Инициализация массивов значениями данных из объектов классов
- 2.10.3. Массивы указателей на методы члены класса. Примеры
- 2.10.4. Указатель на статический член данных класса. Массивы статических членов данных. Массивы указателей на статические члены данных. Примеры
- 2.11. Понятие побитового копирования. Пример. Необходимость использования конструктора копирования и оператора копирования для классов, содержащих динамическое выделение памяти
- 4. Перегрузка операторов
- 4.1. Перегрузка операторов в C++. Операторная функция. Ключевое слово operator. Перегрузка базовых арифметических операторов +, –, *, /. Примеры реализации встроенных операторных функций
- 4.2. «Дружественные» операторные функции: отличия, реализации, особенности применения. Перегрузка операторов +, –, *, / с помощью «дружественных» операторных функций
- 4.3. Класс DoubleArray. Пример поэлементного суммирования двух массивов. Перегрузка оператора +. Динамическое выделение памяти под массив. Конструктор копирования. Недостатки побитового копирования
- 4.4. Перегрузка инкрементных и декрементных операторов ++, — —. Примеры
- 4.5. Перегрузка сокращенных операторов присваивания +=, -=, *=, /=, %=. Примеры
- 4.6. Перегрузка операторов new и delete. Примеры
- 4.7. Перегрузка оператора присваивания =. Примеры
- 4.8. Перегрузка оператора индексирования элементов массива [ ]
- 4.9. Перегрузка оператора ( ) вызова функции. Примеры
- 4.10. Перегрузка операторов -> и ‘ . ‘ (запятая). Примеры
- 5. Агрегация, композиция, наследование, полиморфизм, абстрактные классы
- 5.1. Типы отношений между классами is-a, has-a. Примеры. Агрегация. Композиция
- 5.2. Наследование
- 5.2.1. Наследование. Общие понятия. Использование модификаторов private, protected, public при наследовании
- 5.2.2. Порядок вызова конструкторов при наследовании. Ограничения наследования. Свойства указателя на базовый класс
- 5.2.3. Множественное наследование. Дублирование класса и его данных. Проблема ромба
- 5.2.4. Наследование шаблонных классов. Добавление нового типа в унаследованных классах
- 5.3. Полиморфизм. Виртуальные функции. Общие понятия. Спецификаторы virtual, override. Примеры
- 5.4. Абстрактный класс. Чисто виртуальная функция. Ключевое слово abstract. Примеры
- 5.5. Ограничения виртуальных функций. Спецификатор final
- 6. Исключения (exceptions)
- 7. Пространства имен. Ключевые слова namespace, using. Правила создания пространства имен. Глобальное пространство имен
- 9. Динамическая идентификация типов. Умные указатели
- 10. Файловая система
- 10.1. Файловая система. Принципы работы файловой системы C++. Примеры. Открытие/закрытие файла
- 10.2. Примеры использования средств C++ для работы с файлами
- 10.3. Примеры работы с текстовыми файлами. Модификация файлов. Сортировка данных в файлах. Конвертирование строк файла в массив. Замена/удаление строки в файле. Вставка строки в файле
- 10.4. Примеры сохранения/чтения объектов класса. Сериализация
- 11. Динамические структуры данных
- 11.1. Стек. Операции над стеком. Пример реализации стека в виде динамического массива
- 11.2. Очередь. Особенности реализации. Способы реализации очереди. Представление очереди в виде динамического массива
- 11.3. Очередь с приоритетами. Пример реализации. Представление в виде динамического массива
- 11.4. Кольцевая очередь. Разработка шаблонного класса, реализующего кольцевую очередь
- 11.5. Разработка шаблонного класса, реализующего стек в виде односвязного списка
- 11.6. Линейный односвязный список. Общие сведения. Базовые операции со списком
- 11.7. Пример реализации линейного односвязного списка для обобщенного типа T
- 11.8. Линейный двухсвязный список. Общие сведения. Базовые операции со списком
- 11.9. Линейный двухсвязный список. Пример шаблонного класса
- 11.10. Реализация стека как односвязного списка
- 11.11. Бинарное дерево поиска
- 2. Классы
- III. Библиотека стандартных функций и классов C++
- IV. Примеры разработки классов
- 1. Разработка класса, реализующего массив строк типа char*
- 2. Разработка класса Random генерирования случайных чисел
- 3. Разработка класса, реализующего линейный поиск в одномерном массиве
- 4. Разработка класса реализующего алгоритм сортировки выбором
- 5. Разработка класса реализующего «умный» указатель
- V. Библиотека стандартных шаблонов STL
- 1. Библиотека STL (Standard Template Library). Общие понятия. Контейнеры. Алгоритмы. Итераторы. Функторы
- 2. Контейнеры
- 2.1. Класс vector. Динамический массив
- 2.1.1. Общие сведения о классе vector. Обзор методов. Создание динамического массива. Способы доступа к элементам вектора
- 2.1.2. Методы, определяющие и изменяющие общие характеристики массива: size(), max_size(), capacity(), empty(), shrink_to_fit(), resize(), reserve()
- 2.1.3. Методы, изменяющие данные в массиве. Методы push_back(), pop_back(), clear(), swap(), operator=(), erase(), insert(), assign()
- 2.1.4. Методы, обеспечивающие доступ к элементам массива: at(), front(), back(), data(), begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin(), crend()
- 2.2. Класс map. Ассоциативный контейнер
- 2.2.1. Создание контейнера. Конструкторы. Создание пары. Обзор функций и операторов класса
- 2.2.2. Методы, обеспечивающие получение информации из контейнера: at(), begin(), end(), count(), empty(), find(), size(), max_size(), operator[]()
- 2.2.3. Методы, изменяющие данные в контейнере: clear(), erase(), insert(), swap(), operator=()
- 2.1. Класс vector. Динамический массив
- 3. Алгоритмы
- 3.1. Алгоритмы работы с данными которые представлены по принципу «кучи» (heap). Алгоритмы make_heap, push_heap, pop_heap, sort_heap
- 3.2. Алгоритмы определения минимума и максимума. Алгоритмы min, min_element, max, max_element, lexicographical_compare
- 3.3. Алгоритмы перестановок. Алгоритмы next_permutation, prev_permutation
- 3.4. Немодифицирующие алгоритмы. Поиск. Алгоритмы find, find_if, find_first_of, find_end, adjanced_find, search, search_n
- 3.5. Немодифицирующие алгоритмы. Алгоритмы count, count_if, equal, equal_range, mismatch
- 3.6. Алгоритмы для работы с множествами. Алгоритмы includes, set_union, set_intersection, set_difference, set_symmetric_difference
- 3.7. Модифицирующие алгоритмы. Часть 1. Алгоритмы изменяющие значения элементов последовательности. Алгоритмы for_each, transform, fill, fill_n, generate, generate_n
- 3.8. Модифицирующие алгоритмы. Часть 2. Алгоритмы обмена значениями элементов последовательности. Алгоритмы swap, swap_ranges, iter_swap
- 3.9. Модифицирующие алгоритмы. Часть 3. Алгоритмы выполняющие замену элементов последовательности. Алгоритмы replace, replace_if, replace_copy_if, replace_copy
- 3.10. Модифицирующие алгоритмы. Часть 4. Алгоритмы, извлекающие из последовательности элементы или группы элементов: remove, remove_if, remove_copy, remove_copy_if, unique, unique_copy
- 3.11. Модифицирующие алгоритмы. Часть 5. Алгоритмы, обрабатывающие последовательность в целом не изменяя значений элементов: copy, copy_backward, reverse, reverse_copy, rotate, rotate_copy, random_shuffle
Практика
Borland C++ Builder
- 001 — Создание Windows-приложения в C++ Builder.
- 002 — Сортировка записей в базе данных.
- 003 — Создание отчета Rave Report на основе таблицы MS Access в C++ Builder.
- 004 — Подключение базы данных Microsoft Access к Windows-приложению.
- 005 — Пример вывода таблицы базы данных в компоненте DBGrid в C++ Builder.
- 006 — Пример программирования события в C++ Builder.
- 007 — Пример разработки приложения определения объема цилиндра в C++ Builder.
- 008 — C++ Builder. Пример создания и вызова новой формы из главной формы приложения.
- 011 — C++ Builder. Разработка приложения решения системы линейных алгебраических уравнений методом Гаусса.
- 012 — Разработка программы рисования графика функции одной переменной.
Microsoft Visual Studio 2010-2019
- 001 — Создание простого диалогового приложения Windows типа Dialog Based Application с использованием библиотеки MFC.
- 002 — Пример создания и вызова диалогового окна в MS Visual Studio 2010 — C++ (MFC Application).
- 003 — Создание приложения типа Windows Forms Application в MS Visual Studio — C++. Обзор основных файлов проекта.
- 004 — Пример разработки простейшего приложения типа Windows Forms на языке C++ в MS Visual Studio.
- 005 — Пример разработки приложения для вычисления выражения с перехватом возможных исключительных ситуаций. Работа с инструкцией try…throw…catch
- 006 — Пример разработки приложения с использованием оператора условного перехода if. Обзор основных свойств формы
- 007 — Пример использования оператора switch в приложении. Элемент управления ComboBox
- 008 — Демонстрация использования цикла for в программах. Пример вычисления суммы ряда
- 009 — Разработка программы вычисления суммы отрицательных элементов массива. Элемент управления DataGridView
- 010 — Разработка программы вычисления выражения, реализованного отдельной функцией. Элемент управления PictureBox
- 011 — Пример создания Unit-теста в Microsoft Visual Studio — C++
- 012 − Решение задачи размещения N ферзей на доске размером N×N. Курсовая работа
- 013 – Контрольная работа. Приложение Console Application. Шаблонный класс CArray – динамический массив данных
Решение задач
- Одномерные массивы. Циклы for, while, do…while
- Одномерные массивы. Циклы for, while, do..while в объединении с оператором условного перехода if
- Решение задач. Функции и массивы. Прототип функции. Передача массива в функцию
- Примеры решения задач на шаблоны функций. Перегрузка шаблонов функций. Обработка массивов
- Рекурсия. Примеры решения задач на рекурсию в C++
- Разработка класса, демонстрирующего обработку исключительной ситуации переполнения для встроенного типа int
- Пример использования шаблонного класса Матрица с динамическим выделением памяти
⇑