Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭКЗ_2020_ООП.odt
Скачиваний:
23
Добавлен:
23.06.2020
Размер:
217.5 Кб
Скачать

Ооп Экзамен 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!