Указатели и ссылки — это два синтаксически разных способа в C++ выразить понятие адреса
https://habr.com/ru/post/251091/
Определение гласит, что «Объектно-ориентированное программирование – это парадигма программирования, в которой основной концепцией является понятие объекта, который отождествляется с предметной областью.»
Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).
Состояние объекта — это набор всех его полей и их значений.
Поведение объекта — это набор всех методов класса объекта.
Идентичность объекта — это то, что отличает один объект класса от другого объекта класса
3. ООП. Классы. Устройство в памяти. Инкапсуляция. Модификаторы доступа. Наследование. Множественное наследование. Проблемы множественного наследование.
выравнивать стоит по размеру наибольшего типа в классе!
http://scrutator.me/post/2014/06/02/objects_memory_layout_p2.aspx
Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт). С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).
Уровень доступности позволяет регулировать доступ к данным и методам класса. Одни элементы класса могут быть общедоступны, другие — скрыты. Сокрытие данных и методов в классе называется инкапсуляцией.
- Private
- элемент недоступен любым экземплярам методов других классов или методов, которые не являются «дружественными» к классу
- элемент недоступен из унаследованных классов
- элемент доступен из методов, которые реализованы в классе
- элемент доступен из дружественных функций
- элемент доступен из методов дружественных классов
- Public
- элемент доступен всем методам в программе (Исключение составляет случай, когда класс унаследован как private)
- Protected
- элемент класса недоступен из любого внешнего метода, если этот метод не является дружественным;
- элемент класса доступен из внутренних методов класса. Здесь следует заметить, что protected-элемент класса также доступен из экземпляра класса, если этот экземпляр объявляется во внутреннем методе класса;
- элемент класса доступен из дружественных функций класса
- элемент класса доступен из методов дружественного класса
- элемент класса доступен из методов унаследованного класса
- элемент класса недоступен из экземпляров унаследованного класса. Это правило не касается «дружественных» методов и методов «дружественных» классов.
Наследование представляет один из ключевых аспектов объектно-ориентированного программирования, который позволяет наследовать функциональность одного класса или базового класса (base class) в другом - производном классе (derived class).
Конструкторы при наследовании не наследуются. И если базовый класс содержит только конструкторы с параметрами, то производный класс должен вызывать в своем конструкторе один из конструкторов базового класса
Проблемы множественного наседования:
- Одинаковые поля или методы в родительских классах Для решения нужно прямо указывать к какому члену или методу мы обращаемся
- Ромбовидное наследование
4. ООП. Классы. Инициализация и уничтожение. Виды конструкторов Виртуальные методы. Таблица виртуальных функций. Виртуальные деструкторы.
Конструктор — функция, предназначенная для инициализации объектов класса. Конструктор всегда имеет то же имя, что и сам класс и никогда не имеет возвращаемого значения. Когда класс имеет конструктор, все объекты этого класса будут проинициализированы. Их может быть много разных
Виды конструкторов
- По умолчанию (не имеет параментров)
- С парамерами
- Конструктор копирования
Деструктор обеспечивает соответствующую очистку объектов указанного типа. Многие классы используют динамическую память, которая выделяется конструктором, а освобождается деструктором. Деструктор выполняет освобождение использованных объектом ресурсов и удаление нестатических переменных объекта. Каждый класс может иметь только один деструктор.
Деструктор автоматически вызывается, когда удаляется объект. Удаление объекта происходит в следующих случаях:
- выход из области видимости
- когда удаляется контейнер (например, массив), который содержит объекты
- динамически созданные объекты удаляются при применении к указателю на объект оператора delete
Виртуальные функции — специальный вид функций-членов класса. Виртуальная функция отличается от обычной функции тем, что для обычной функции связывание вызова функции с ее определением осуществляется на этапе компиляции. Для виртуальных функций это происходит во время выполнения программы.
Чистая виртуальная функция — это метод класса, тело которого не определено.
Перегружать можно только операции над пользовательскими типами!
ВАЖНО !
Перехватываем оверфлоу
Функциональный объект
https://habr.com/ru/post/54762/
https://teccxx.neocities.org/mx1/variadic_templates.html
Variadic template - это шаблон с переменным количеством аргументов
10.Преобразования типов. Явные и неявные. С-cast, static_cast, dynamic_cast, const_cast, reinterpret_cast. CRTP
ИМБА! - СТАТЬЯ ПРО КАСТЫ
crtp:
Еще одна реализация CRTP: