- •Ооп Экзамен 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. Что такое шаблон проектирования?
Ооп Экзамен 2020
1. Язык С++ считается низкоуровневым или высокоуровневым?
C++ — язык программирования общего назначения. Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков.В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.
------------------------------------------------------------------------------------------------------------------------Характеристики C++
1. Сложный
2. Мультипарадигменный
3. Эффективный
4. Низкоуровневый
5. Компилируемый
6. Статически типизированный
2. Какие отличия между указателем и ссылкой?
Если кратко, то вот отличия ссылок от указателей:
1. Указатель может быть переназначен любое количество раз, в то время как ссылка после привязки не может быть перемещена на другую ячейку памяти.
2. Указатели могут указывать "в никуда" (быть равными NULL), в то время как ссылка всегда указывает на определенный объект. GCC может без выдачи предупреждений обработать код наподобие int &x = *(int*)0;, однако поведение подобного кода может быть непредсказуемым.
3. Вы не можете получить адрес ссылки, как можете это делать с указателями.
4. Не существует арифметики ссылок, в то время как существует арифметика указателей. Однако есть возможность получить адрес объекта, указанного по ссылке, и применить к этому адресу арифметику указателей (например &obj + 5).
3. Что такое rvlaue и lvalue переменные?
l-value – это значение, которое имеет свой адрес в памяти. Поскольку все переменные имеют адреса, то они все являются l-values. l от слова «left», так как только значения l-values могут находиться в левой стороне в операциях присваивания (в противном случае мы получим ошибку). Например, операция 9 = 10; вызовет ошибку компилятора, так как 9 не является l-value. Число 9 не имеет своего адреса в памяти и, таким образом, мы ничего не можем ему присвоить.
r-value – это значение, которое не имеет постоянного адреса в памяти. Примерами могут быть единичные числа или выражения.
Нужно запомнить – что в левой стороне операции присваивания всегда должно находиться l-value (которое имеет свой адрес в памяти), а в правой стороне операции присваивания – r-value (которое производит какое-то значение).
------------------------------------------------------------------------------------------------------------------------ • lvalue (locator value) представляет собой объект, который занимает идентифицируемое место в памяти (например, имеет адрес)
• rvalue – всё что не является lvalue
4. Что такое rvalue и lvalue ссылки?
До версии C++11 существовал только один тип ссылок, его называли просто — «ссылка». В C++11 этот тип ссылки ещё называют «ссылкой l-value», а так же появились «ссылки r-value».
Ссылки r-value чаще всего используются в качестве параметров функции. Это наиболее полезно при перегрузке функций
Ссылки 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 на константные объекты также могут это делать).
-Неконстантные ссылки r-value позволяют нам изменять значения r-values, на которые указывают ссылки r-value!