- •Ооп Экзамен 2020
- •4. Низкоуровневый
- •2. Какие отличия между указателем и ссылкой?
- •3. Что такое rvlaue и lvalue переменные?
- •4. Что такое rvalue и lvalue ссылки?
- •5. Как связаны lvalue и rvalue ссылки и переменные?
- •6. Что такое ооп?
- •15. Что такое указатель на функцию и как он может быть использован?
- •22. Что такое выравнивание памяти в структурах и классах?
- •23. Что такое инвариант класса?
- •24. В чем отличие функций от методов?
- •37. В каких случаях используется перегрузка конструкторов?
- •38. Какую цель может преследовать создание приватного конструктора?
- •45. Каково время жизни объекта?
- •46. Зачем нужен виртуальный деструктор?
- •48. В чем различие delete и delete[]?
- •49. Что подразумевается под идиомой raii?
- •50. Перечислите основные подходы к обработке ошибок.
- •51. Для чего предназначен механизм обработки исключительных ситуаций?
- •52. Что такое исключение?
- •54. Как происходит возбуждение исключения?
- •55. Кто отвечает за обработку возникших исключительных ситуаций?
- •56. Какие 3 уровня гарантии в механизме исключений?
- •Строгая гарантия “если при выполнении операции возникает исключение, то это не должно оказать какого-либо влияния на состояние приложения ”.
- •57. Что такое раскрутка стека?
- •66. Время жизни агрегируемого объекта меньше времени жизни агрегата?
- •67. Какие классы называются дружественными, для каких целей используется это
- •75. Как осуществить вызов базовой реализации функции при её переопределении в
- •76. Как связаны виртуальные функции и полиморфизм?
- •77. Что такое переопределение функций?
- •78. Работает ли переопределение для приватных функций?
- •79. Что такое таблица виртуальных функций?
- •80. Как себя ведут виртуальные функции в конструкторе и деструкторе?
- •81. В каких случаях допустимо приведение указателей/ссылок на дочерний класс к
- •82. Что такое чистая виртуальная функция?
- •83. Какой класс называется абстрактным?
- •85. Что такое перегрузка функций?
- •86. Как ведет себя перегрузка при наследовании?
- •87. Опишите процесс выбора функции среди перегруженных.
- •88. Чем отличаются механизмы раннего и позднего связывания?
- •89. Что такое множественное наследование?
- •95. Что такое динамическое приведение типов?
- •Динамическое приведение указателя
- •96. Что такое константное приведение типов? const_cast — константное приведение типов данных
- •98. Что такое умные указатели?
- •116. Какие особенности использования dynamic_cast, его отличия от static_cast?
- •117. Что такое шаблоны классов?
- •118. Что такое шаблоны функций?
- •119. Как осуществляется вывод аргументов шаблона?
- •120. Что может быть параметром шаблона?
- •121. Что такое специализация шаблонов?
- •122. Что такое нешаблонная база?
- •123. Что такое странно рекурсивный шаблон?
- •124. Какая разница между typedef и using?
- •125. Что такое ключевое слово decltype?
- •126. Что такое принципы solid?
- •127. Что такое принцип единственной ответственности?
- •128. Что такое принцип открытости/закрытости?
- •129. Что такое принцип подстановки Барбары Лисков?
- •130. Что такое принцип разделения интерфейса?
- •131. Что такое принцип инверсии зависимостей?
- •133. Что такое шаблон проектирования?
5. Как связаны lvalue и rvalue ссылки и переменные?
Ссылки l-value могут быть инициализированы только изменяемыми l-values. Ссылки l-value на константные объекты могут быть инициализированы с помощью как l-values, так и r-values. Однако эти значения не могут быть изменены (константы не изменяют свои значения).
Ссылки r-value — это ссылки, которые инициализируются только значениями
r-values.
Ссылка l-value создаётся с использованием одного амперсанда, ссылка r-value создаётся с использованием двойного амперсанда.
Ссылки r-value не могут быть инициализированы значениями l-values.
Ссылки r-value имеют два полезных свойства:
-Они увеличивают продолжительность жизни объекта, которым инициализируются, до продолжительности жизни ссылки r-value (ссылки l-value на константные объекты также могут это делать).
6. Что такое ооп?
Объектно-ориентированное программирование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.
Принципы ооп: Инкапсуляция, Наследование, Полиморфизм. Абстакция не является основным принципом ооп, но ее часто вспоминают, когда говорят о принципах ооп.
Объект — это сущность, экземпляр класса, которой можно посылать сообщения и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы.
7. Что подразумевает абстракция с точки зрения ООП?
Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые Соответственно, абстракция — это набор всех таких характеристик.
В контексте ООП абстракция — это обобщение данных и поведения для типа, находящегося выше текущего класса по иерархии.
8. Что такое инкапсуляция?
Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.
Другими словами инкапсуляция– это механизм контроля доступа.
9. Что такое наследование?
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом
10. Что такое полиморфизм?
Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
В более общем смысле, концепцией полиморфизма является идея “один интерфейс, множество методов“.
Механизм, позволяющий скрыть за интерфейсом общий класс действий
11. Какие существуют виды полиморфизма?
Виды полиморфизма:
- статический (определяется во время компиляции). Перегрузка функций, методов, операторов и т.д.
- динамический (определяется во время выполнения). Содержит виртуальные функции и методы.
- Параметрический.
12. Для чего и на какие файлы производится разбиение программы на С++?
Зачем разбивать программу на файлы?
С небольшими файлами удобнее работать.
Разбиение на файлы структурирует код.
Позволяет нескольким программистам разрабатывать приложение одновременно.
Ускорение повторной компиляции при небольших изменениях в отдельных частях программы.
Файлы с кодом на C++ бывают двух типов:
Файлы с исходным кодом (расширение .cpp);
Заголовочные файлы (расширение .h).
13. Что такое union в C++, когда оно может быть применимо?
Объединения - это объект, позволяющий нескольким переменным различных типов занимать один участок памяти. Применяется для экономии памяти, однако это уже не актуально лет 15.
14. Что такое перечисление в C++ и особенности его использования?
Перечисление — это тип данных, где любое значение определяется как символьная константа. Объявить перечисление можно с помощью ключевого слова enum.
Каждому перечислителю автоматически присваивается целочисленное значение в зависимости от его позиции в списке перечисления. По умолчанию, первому перечислителю присваивается целое число 0, а каждому следующему — на единицу больше, чем предыдущему
Можно сомому присвоить значение перечислителю.