
- •Ооп Экзамен 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. Что такое шаблон проектирования?
124. Какая разница между typedef и using?
Директива
using
существует только в С++
,
typedef
- это наследство от чистого C
Так
же при
использовании typedef
мы создаём синоним имени типа, а using
позволяет создать синоним типа, либо
включить в текущее пространство имён
существующее.
125. Что такое ключевое слово decltype?
decltype используется для определения типа во время компиляции без инициализации переменной, а так же используется для определения типа возвращаемого функцией значения.
126. Что такое принципы solid?
Принципы SOLID — это стандарт программирования
• Цель принципов – создание программных сущностей среднего уровня:
• Терпимы к изменениям
• Просты и понятны
• Образуют основу для компонентов, который могут использоваться во многих программных средствах
5 принципов
• S – Single Responsibility Principle (SRP) – принцип единственной ответственности
• O – Open-Closed Principle (OCP) – принцип открытости/закрытости
• L – Liskov Substitution Principle (LSP) – принцип подстановки Барбары Лисков
• I – Interface Segregation Principle (ISP) – принцип разделения интерфейсов
• D – Dependency Inversion Principle (DIP) – принцип инверсии зависимости
127. Что такое принцип единственной ответственности?
«Модуль должен отвечать за одного и только одного актора»
Один класс должен решать только какую-то одну задачу. Он может иметь несколько методов, но они должны использоваться лишь для решения общей задачи. Все методы и свойства должны служить одной цели. Если класс имеет несколько назначений, его нужно разделить на отдельные классы.
128. Что такое принцип открытости/закрытости?
«Программные сущности должны быть открыты для расширения и закрыты для изменения»
Программные сущности (классы, модули, функции и прочее) должны быть расширяемыми без изменения своего содержимого. Если строго соблюдать этот принцип, то можно регулировать поведение кода без изменения самого исходника.
129. Что такое принцип подстановки Барбары Лисков?
«Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом»
Любая реализация абстракции (интерфейса) должна быть взаимозаменяемой в любом месте, в котором принимается эта абстракция. По сути, когда мы используем в коде интерфейсы, то используем контракт не только по входным данным, принимаемым интерфейсом, но и по выходным данным, возвращаемым разными классами, реализующими этот интерфейс. В обоих случаях данные должны быть одного типа.
------------------------------------------------------------------------------------------------------------------------
этот принцип утверждает, что для создания программных систем из взаимозаменяемых частей эти части должны соответствовать контракту, который позволяет заменять эти части друг другом
130. Что такое принцип разделения интерфейса?
Много интерфейсов, специально предназначенных для клиентов,
лучше, чем один интерфейс общего назначения
Разделение интерфейса облегчает использование и тестирование
модулей
------------------------------------------------------------------------------------------------------------------------
Нужно разбивать интерфейсы на более мелкие, лучше удовлетворяющие конкретным потребностям клиентов.
------------------------------------------------------------------------------------------------------------------------Этот принцип призывает разработчиков программного обеспечения из-бегать зависимости от всего, что не используется .