- •Ооп Экзамен 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. Что такое шаблон проектирования?
66. Время жизни агрегируемого объекта меньше времени жизни агрегата?
Нет.(Это из нета, остальное мои рассуждения)
При агрегации Целое(агрегат) не управляет временем жизни части(агрегируемый), обычно часть умирает быстрее, но точно сказать нельзя, так как мы мажем убить Целое раньше
(Наверное это правильно, но лучше перепроверить).
67. Какие классы называются дружественными, для каких целей используется это
отношение?
Один класс можно сделать дружественным другому классу. Это откроет всем членам первого класса доступ к закрытым членам второго класса. Однако если класс A является другом B, а B является другом C, то это не означает, что A является другом C.
------------------------------------------------------------------------------------------------------------------------
Дружественный класс — это класс, который имеет доступ к закрытым членам другого класса, как если бы он сама была членом этого класса. Это позволяет классу работать в тесном контакте с другим классом, не заставляя другого класса делать открытыми свои закрытые члены.
68. В каком случае можно говорить об отношение «реализация»?
Реализация
• Структурное отношение
• Наследование от интерфейса
• Интерфейс - класс, содержащий только чистые виртуальные
методы и не обладающий состоянием
69. Как представлены объекты в памяти при использовании механизма наследования?
Сначала распологется базовый класс, после класс наследник. Если последнее поле в базовом классе было char и первое поле в классе наследнике тоже char, то в памяти не будет пустых байт. При множественном наследовании сначала идут родительские классы, а после наследник.
70. Какие существуют типы наследования, чем они различаются?
В C ++ есть несколько типов наследования:
-
публичный (
public
)- публичные (public
) и защищенные (protected
) данные наследуются без изменения уровня доступа к ним; -
защищенный (
protected
) — все унаследованные данные становятся защищенными; -
приватный (
private
) — все унаследованные данные становятся приватными.
71. Наследуются ли конструкторы и деструкторы?
В C ++ конструкторы и деструкторы не наследуются. Однако они вызываются, когда дочерний класс инициализирует свой объект. Конструкторы вызываются один за другим иерархически, начиная с базового класса и заканчивая последним производным классом. Деструкторы вызываются в обратном порядке.
72. Наследуются ли приватные поля базового класса?
Да, но класс-наследник не имеет к ним доступа.
В каждый объект класса помимо его собственных полей запихиваются все поля базового класса, по принципу матрешки. НЕВАЖНО, что вы не имеете к ним доступ из класса-наследника. Важно, что они есть, и методы базового класса могут ими спокойно пользоваться, чтобы выполнять свою работу.
73. Что такое полиморфный класс?
• Любой класс, содержащий по крайней мере одну виртуальную функцию является полиморфным
• Каждый объект такого класса содержит таблицу виртуальных функций ( vtable )
• При использовании ссылки / указателя разрешение методов происходит динамически в момент вызова
74. Что такое виртуальная функция?
Виртуальная функция в С++ — это особый тип функции, которая, при её вызове, вызывает «наиболее» дочерний метод, который существует между родительским и дочерними классами. Эта возможность ещё известна как полиморфизм. Дочерний метод вызывается тогда, когда совпадает сигнатура (имя, типы параметров и является ли метод константным) и тип возврата дочернего метода с сигнатурой и типом возврата метода родительского класса. Такие методы называются переопределениями (или ещё «переопределёнными методами»).
----------------------------------------------------------------------------------------------------------------------
• Функция-член класса, которую предполагается переопределить в производных классах
• При использовании объекта производного класса через указатель или ссылку на базовый можно вызвать виртуальную функцию и выполнить версию, определенную в производном классе
• Модификатор virtual располагается перед типом возвращаемого значения
• Должна быть определена в месте первого объявления
• Может быть переопределена в дочерних классах
-----------------------------------------------------------------------------------------------------------------------
Виртуальные функции — специальный вид функций-членов класса. Виртуальная функция отличается об обычной функции тем, что для обычной функции связывание вызова функции с ее определением осуществляется на этапе компиляции. Для виртуальных функций это происходит во время выполнения программы.