- •Ооп Экзамен 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. Что такое шаблон проектирования?
46. Зачем нужен виртуальный деструктор?
Виртуальный деструктор необходим для корректного удаления памяти объекта наследника через указатель на базовый класс. Если деструктор в базовом классе объявлен как виртуальный, то при удалении объекта наследника через указатель на базовый класс вызовется сначала деструктор наследника, а потом деструктор базового класса. Иначе, вызовется деструктор только базового класса.
47. Как осуществляется работа с динамической памятью в С/С++?
В Си работать с динамической памятью можно при помощи соответствующих функций распределения памяти (calloc, malloc, free), для чего необходимо подключить библиотеку malloc.h С++ использует новые методы работы с динамической памятью при помощи операторов new и delete:
-
new — для выделения памяти;
-
delete — для освобождения памяти.
Результатом выполнения операции new будет указатель на отведенную память, или нулевой указатель в случае ошибки.
Память, отведенная в результате выполнения new, будет считаться распределенной до тех пор, пока не будет выполнена операция delete. Освобождение памяти связано с тем, как выделялась память – для одного элемента или для нескольких. В соответствии с этим существует и две формы применения delete:
delete и delete[].
48. В чем различие delete и delete[]?
delete явно указывает на удаление указателя, а delete[] явно указывает на удаление массива указателей.
49. Что подразумевается под идиомой raii?
Resource Acquisition Is Initialization - получение ресурса есть инициализация
• Основная идея - с помощью механизмов языка получение ресурса
неразрывно совмещается с инициализацией , а освобождение - с
уничтожением объекта
• Типичный способ реализации - получение доступа в конструкторе, а
освобождение в деструкторе
• Применяется для:
• Выделения памяти
• Открытия файлов / устройств / каналов
50. Перечислите основные подходы к обработке ошибок.
1. Остановка программы
2. Возврат кода ошибки из вызванного метода
3. Сообщение об ошибке через внешнюю переменную – errno
4. Использование функций-обработчиков
51. Для чего предназначен механизм обработки исключительных ситуаций?
1. Альтернатива традиционным техникам обработки ошибок
2. Позволяет программистам разделить код на:
Реализующий естественное поведение программы
Обрабатывающий исключительные ситуации
3. Предоставляет единый стиль обработки ошибок
52. Что такое исключение?
Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти.
Это некое действие, которое вступает в силу, при наступлении нестандартной ситуации.
Исключением может быть:
-
событие;
-
ситуация;
-
объект;
-
ошибка в программе;
-
прерывание;
------------------------------------------------------------------------------------------------------------------------
Исключения используются тогда, когда код решения проблемы находится не рядом с местом её возникновения.
Предназначены для доставки информации из точки, где обнаружена ошибка в точку, где она может быть обработана.
53. Какие типы данных допустимы для использования в качестве объектов exception?Объекты исключений могут быть любого типа, допускающего копирование.
Строго рекомендуется использовать специально разработанные типы для объектов, которые «бросаются» в исключительных ситуациях. Это минимизирует шансы на пересечение с другими типами ошибок от сторонних компонентов программы.