/c-exam

хвост спаисбо

1. Ссылки. Разница между ссылкой и указателем. Зачем в С++ были добавлены ссылки.

image

image

image

image

image

image

image

Указатели и ссылки — это два синтаксически разных способа в C++ выразить понятие адреса

https://habr.com/ru/post/251091/



2. ООП. Базовые принципы. Абстракция, инкапсуляция, наследование полиморфизм. SOLID.

Определение гласит, что «Объектно-ориентированное программирование – это парадигма программирования, в которой основной концепцией является понятие объекта, который отождествляется с предметной областью.»

Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).

Состояние объекта — это набор всех его полей и их значений.

Поведение объекта — это набор всех методов класса объекта.

Идентичность объекта — это то, что отличает один объект класса от другого объекта класса

image

image

image

Solid


3. ООП. Классы. Устройство в памяти. Инкапсуляция. Модификаторы доступа. Наследование. Множественное наследование. Проблемы множественного наследование.

Как выделяется память?

image

image

выравнивать стоит по размеру наибольшего типа в классе!

image

image

image

image

image

image

image

http://scrutator.me/post/2014/06/02/objects_memory_layout_p2.aspx

Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт). С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).

Модификаторы доступа

Уровень доступности позволяет регулировать доступ к данным и методам класса. Одни элементы класса могут быть общедоступны, другие — скрыты. Сокрытие данных и методов в классе называется инкапсуляцией.

  1. Private
  • элемент недоступен любым экземплярам методов других классов или методов, которые не являются «дружественными» к классу
  • элемент недоступен из унаследованных классов
  • элемент доступен из методов, которые реализованы в классе
  • элемент доступен из дружественных функций
  • элемент доступен из методов дружественных классов
  1. Public
  • элемент доступен всем методам в программе (Исключение составляет случай, когда класс унаследован как private)
  1. Protected
  • элемент класса недоступен из любого внешнего метода, если этот метод не является дружественным;
  • элемент класса доступен из внутренних методов класса. Здесь следует заметить, что protected-элемент класса также доступен из экземпляра класса, если этот экземпляр объявляется во внутреннем методе класса;
  • элемент класса доступен из дружественных функций класса
  • элемент класса доступен из методов дружественного класса
  • элемент класса доступен из методов унаследованного класса
  • элемент класса недоступен из экземпляров унаследованного класса. Это правило не касается «дружественных» методов и методов «дружественных» классов.

Наследование

Наследование представляет один из ключевых аспектов объектно-ориентированного программирования, который позволяет наследовать функциональность одного класса или базового класса (base class) в другом - производном классе (derived class).

Конструкторы при наследовании не наследуются. И если базовый класс содержит только конструкторы с параметрами, то производный класс должен вызывать в своем конструкторе один из конструкторов базового класса

Проблемы множественного наседования:

  • Одинаковые поля или методы в родительских классах Для решения нужно прямо указывать к какому члену или методу мы обращаемся

image

  • Ромбовидное наследование

image

4. ООП. Классы. Инициализация и уничтожение. Виды конструкторов Виртуальные методы. Таблица виртуальных функций. Виртуальные деструкторы.

Конструктор — функция, предназначенная для инициализации объектов класса. Конструктор всегда имеет то же имя, что и сам класс и никогда не имеет возвращаемого значения. Когда класс имеет конструктор, все объекты этого класса будут проинициализированы. Их может быть много разных

Виды конструкторов

  • По умолчанию (не имеет параментров)
  • С парамерами
  • Конструктор копирования

Деструктор обеспечивает соответствующую очистку объектов указанного типа. Многие классы используют динамическую память, которая выделяется конструктором, а освобождается деструктором. Деструктор выполняет освобождение использованных объектом ресурсов и удаление нестатических переменных объекта. Каждый класс может иметь только один деструктор.

Деструктор автоматически вызывается, когда удаляется объект. Удаление объекта происходит в следующих случаях:

  • выход из области видимости
  • когда удаляется контейнер (например, массив), который содержит объекты
  • динамически созданные объекты удаляются при применении к указателю на объект оператора delete

Виртуальные методы

Виртуальные функции — специальный вид функций-членов класса. Виртуальная функция отличается от обычной функции тем, что для обычной функции связывание вызова функции с ее определением осуществляется на этапе компиляции. Для виртуальных функций это происходит во время выполнения программы.

Чистая виртуальная функция — это метод класса, тело которого не определено.

image

image

image

image

5. ООП. Операторы. Перегрузка операторов.

Перегружать можно только операции над пользовательскими типами!

image

image

image

image

image

image

image

6. Исключения. Обработка ошибок в Си. Assert. Исключения.Преимущества и недостатки исключений.

image


image


image


image


image

image

image

image

ВАЖНО !

image

Перехватываем оверфлоу

image

7. Шаблоны. Шаблоны функций, классов.

image

image

image

image

image

Функциональный объект

image

8. Шаблоны. Частичная специализация и полная специализация

https://habr.com/ru/post/54762/

image

image

image

9. Variadic template

https://teccxx.neocities.org/mx1/variadic_templates.html

Variadic template - это шаблон с переменным количеством аргументов

image

image

image

image

10.Преобразования типов. Явные и неявные. С-cast, static_cast, dynamic_cast, const_cast, reinterpret_cast. CRTP

image

image

image


Гениально о CRTP

image

image

crtp:

image

image

image

Еще одна реализация CRTP:

image

image

image

11. Стандартная библиотека. Итераторы. Алгоритмы. Основные классы алгоритмов.

статья

12.Стандартная библиотека. Контейнеры. Последовательные контейнеры.

13.Стандартная библиотека. Контейнеры. Ассоциативные контейнеры.

14.Стандартная библиотека. Адаптеры.

реализация стека через вектор

15.Умные указатели. auto_ptr, unique_ptr, shared_ptr, weak_ptr. Устройство, преимущества и недостатки.

статья