- •1. Основные типы данных, объявление пользовательских типов данных typedef
- •Int (целочисленный тип)
- •2. Основные директивы препроцессора. Макросы
- •3. Указатели и динамическая память
- •4. Понятие функций. Механизм вызова функций и передача параметров
- •5. Передача и возврат параметров по значению и по указателю
- •6. Ссылки и ссылочные параметры
- •7. Перегрузка функций
- •8. Использование спецификатора const с указателями.
- •9. Понятие идентификатора. Пространства имен. Ключевое слово namespace
- •10. Анонимные пространства имен. Ключевое слово using.
- •11. Понятие структур. Оператор доступа к полям структуры по указателю.
- •12 . Понятие класса и объекта.
- •13. Время жизни переменных и объектов.
- •14. Область действия класса. Управление доступом к членам класса. Отделение интерфейса от реализации
- •15 . Понятие конструктора. Использование конструктора с аргументами по умолчанию. Конструктор по умолчанию.
- •16. Понятие деструктора. Когда вызываются конструкторы и деструкторы.
- •17. Константные объекты и функции-члены.
- •18. Дружественные функции и дружественные классы.
- •19. Использование указателя this.
- •20. Использование операции new и delete.
- •21. Статические члены класса.
- •25.Функции-операции как члены класса и как дружественные функции.
- •26.Перегрузка операции присваивания. Условия вызова оператора присваивания и конструктора копирования.
- •27. Понятие наследования. Механизм ограничения доступа при наследовании.
- •28.Приведение типа указателя базового класса к указателю производного класса и наоборот.
- •29.Переопределение членов базового класса в производном классе.
- •30. Конструкторы и деструкторы в производных классах
- •32. Неявный вызов конструкторов объектов
- •33. Понятие виртуальной функции
- •34. Понятие полиморфизма (примеры)
- •35. Абстрактные и конкретные базовые классы
- •36. Статическое и динамическое связывание
- •37. Виртуальные деструкторы
- •38. Шаблоны. Шаблонная функция
- •39. Шаблоны классов. Применение. Параметры шаблона типа typename
- •40. Шаблоны классов и наследование.
- •41. Шаблоны. Инстанцирование шаблонов и спецификация шаблонов
- •42. Понятие исключения. Когда должна использоваться обработка исключений.
- •43. Генерация исключений. Повторная генерация исключений
- •44. Перехватывание исключений
- •45. Спецификация исключений. Обработка неожидаемых исключений.
- •46. «Раскручивание» стека. Иерархия исключений стандартной библиотеки
- •47. Конструкторы, деструкторы и обработка исключений. Исключения и наследование.
- •48. Обработка неуспешного выполнения new
- •49. Стандартная библиотека шаблонов (stl). Основные типы контейнеров
- •50. Стандартная библиотека шаблонов (stl). Алгоритмы, методы, итераторы
- •51. Последовательные контейнеры: vector, list, deque. Основные методы и алгоритмы
- •52. Ассоциативные контейнеры: set, multiset, map, multimap. Основные методы и алгоритмы.
- •53. Операторы приведения типов static_cast, reinterpret_cast
- •54. Информация о типе времени выполнения (rtti). Использование функции typeid(). Оператор dynamic cast
- •55. Ключевое слово ехрlicit.Ключевое слово mutable
- •56. Классы-контейнеры и классы-итераторы
- •57. Понятие ооп. Парадигмы ооп (инкапсуляция, наследование, полиморфизм)
- •58. Основные составляющие объектного подхода: абстрагирование, инкапсуляция, модульность
- •59. Природа объекта. Состояние, поведение, идентичность объекта
- •60. Отношения между объектами. Связи. Агрегация
4. Понятие функций. Механизм вызова функций и передача параметров
Функция - это группа операторов у которой есть имя.
Синтаксис языка С предусматривает только один способ передачи параметров - передачу параметра по значению. Это значит, что формальные параметры функции локализованы в ней. Они недоступны извне функции. То есть они недоступны вне определения функции. И никакие операции над формальными параметрами в самом теле функции не изменяют значений фактических параметров. Вызов функции может обрабатываться двумя разными способами. Если она объявлена встроенной (inline), то компилятор подставляет в точку вызова ее тело. Во всех остальных случаях происходит нормальный вызов, который приводит к передаче управления ей, а активный в этот момент процесс на время приостанавливается. По завершении работы выполнение программы продолжается с точки, непосредственно следующей за точкой вызова. Работа функции завершается выполнением последней инструкции ее тела или специальной инструкции return. Функция должна быть объявлена до момента ее вызова, попытка использовать необъявленное имя приводит к ошибке компиляции. Определение функции может служить ее объявлением, но ему разрешено появиться в программе только один раз. Поэтому обычно его помещают в отдельный исходный файл. Иногда в одном файле находятся определения нескольких функций, логически связанных друг с другом. Чтобы использовать их в другом исходном файле, необходим механизм, позволяющий объявить ее, не определяя. Объявление функции состоит из типа возвращаемого значения, имени и списка параметров. Вместе эти три элемента составляют прототип. Объявление может появиться в файле несколько раз.
5. Передача и возврат параметров по значению и по указателю
Стандартным способом передачи аргументов является передача по значению. При этом способе функция не получает доступа к реальным объектам, являющихся ее аргументами. Вместо этого она получает в стеке локальные копии этих объектов. Изменение значений копий никак не отражается на значениях самих объектов. Локальные копии теряются при выходе из функции.
При передаче по указателю мы передаём адрес. Внутри функции параметр может непосредственно влиять на содержимое внешней переменной.
Пример:
int main()
{
int a = 10;
pass_by_pointer(&a); // Передача адреса переменной
cout << a; // 5
return 0;
};
void pass_by_pointer (void* ptr)
{
*ptr = 5;
};
6. Ссылки и ссылочные параметры
Ссылочные параметры - это такие параметры подпрограммы, для которых не само значение параметра передаётся и/или возвращается из подпрограммы, а только указатель на него.
Ссылка позволяет косвенно манипулировать объектом, точно так же, как это делается с помощью указателя. Однако эта косвенная манипуляция не требует специального синтаксиса, необходимого для указателей. Обычно ссылки употребляются как формальные параметры функций.Хотя ссылка очень похожа на указатель, она должна быть инициализирована не адресом объекта, а его значением.
В C++ ссылки отличаются от указателей несколькими особенностями:
Невозможно ссылаться напрямую на объект ссылочного типа после его определения; каждое упоминание его имени ссылается напрямую на объект, на который он ссылается.
В качестве результата первого указания не могут быть выполнены ни какие-либо арифметические вычисления, ни приведение типов, ни любые другие операции, кроме копирования их связанных значений в другие ссылки.
После создания ссылки ее нельзя переделать в ссылку на другой объект; в таких случаях говорят, не может быть переопределена. Это часто делают с указателями.
Ссылки не могут быть null (т.е.указывать в никуда), тогда как указатели - могут; каждая ссылка ссылается на некий объект, вне зависимости от его корректности.
Ссылки не могут быть неинициализированными. Так как невозможно переинициализировать ссылку, она должна быть инициализирована сразу после создания. В частности, локальные и глобальные переменные должны быть проинициализированы там же, где они определены, а ссылки, которые являются данными-членами сущностей класса, должны быть инициализированы в списке инициализатора конструктора класса.