- •Ооп Экзамен 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. Что такое шаблон проектирования?
37. В каких случаях используется перегрузка конструкторов?
Конструкторы как и другие методы можно перегружать, это используется когда нужно получить различные объекты класса, с одинаковыми методами, например:
есть class Timer, мы можем перегрузить конструктор так, чтобы можно было указывать время с которым будут работать методы в секундах с помощью целого числа или строки. (+ пример с файлом из лаб работ).
38. Какую цель может преследовать создание приватного конструктора?
Конструктор помещается в секцию private в случаях, если нужно ограничить пользователя в возможностях создания объектов. Закрытые конструкторы так же применяются если для порождения объектов пользователь должен использовать специальную функцию. Эта функция может выполнять ряд дополнительных действий, не допустимых для конструктора. Такой подход применяется в ряде шаблонов проектирования, например шаблон «Фабричный метод». Порождением объектов занимается отдельная функция, которая может принимать идентификатор класса, объект которого нужно создать.
39. Каким образом и в какой последовательности происходит инициализация полей
объекта?
Инициализации происходит в порядке объявления полей с помощью списка инициальзации.
40. Для чего используется ключевое слово explicit? [иксплисит]
Запрещает неявное преобразование.
41. В чем заключается предназначение конструктора по умолчанию?
Конструктор по умолчанию вызывается, если мы не написали своего конструктора, требующего какие-либо параметры.
42. Что такое деструктор, для чего он используется?
Деструктор - это функция, которая называется по имени класса и перед которой стоит тильда (~). Деструктор не имеет возвращаемого значения и не принимает параметров. Каждый класс может иметь только один деструктор. Предназначены для освобождения используемых ресурсов. Вызывается автоматически при удалении экземпляра класса
43. Каков порядок вызова деструкторов при разрушении объекта?
Если класс не учавствовал в наследовании( не ребенок, не родитель), то просто вызывается деструктор.
Если и у базового и у производного классов есть конструкторы и деструкторы, то конструкторы выполняются в порядке наследования, а деструкторы – в обратном порядке.
44. В какой момент вызывается деструктор объекта?
Когда объект автоматически выходит из области видимости или динамически выделенный объект явно удаляется с помощью ключевого слова delete, вызывается деструктор класса (если он существует) для выполнения необходимой очистки до того, как объект будет удалён из памяти. Для простых классов (тех, которые только инициализируют значения обычных переменных-членов) деструктор не нужен, так как C++ автоматически выполнит очистку самостоятельно.
Так же можно вызвать деструктор, т. к. он тоже метод.
45. Каково время жизни объекта?
Объекты уничтожаются, как только выходят из области видимости.
Например если создаем объект в main, то он будет уничтожен в конце программы, если создаем в функции и в main никуда не сохраняем, то объект уничтожится после выхода из функции.
-----------------------------------------------------------------------------------------------------------------------
Время жизни – временной интервал между вызовами конструктора и деструктора.