Программирование. Принципы и практика использования C++ Исправленное издание, стр. 122
double dx = 7.7;double dy = 9.9;swap_?(dx,dy);swap_?(dx,dy);Какие функции и вызовы будут скомпилированы и почему? После каждой скомпилированной перестановки выведите на экран значения аргументов, чтобы убедиться, что они действительно поменялись местами. Если результат вас удивит, обратитесь к разделу 8.6.
3. Напишите программу, использующую единственный файл, содержащий пространства имен
XYZmain()int main(){ X::var = 7; X::print(); // выводим переменную var из пространства имен X using namespace Y; var = 9; print(); // выводим переменную var из пространства имен Y { using Z::var; using Z::print; var = 11; print(); // выводим переменную var из пространства имен Z } print(); // выводим переменную var из пространства имен Y X::print(); // выводим переменную var из пространства имен X}Каждое пространство имен должно содержать определение переменной
varprint()varcoutКонтрольные вопросы
1. В чем заключается разница между объявлением и определением?
2. Как синтаксически отличить объявление функции от определения функции?
3. Как синтаксически различить объявление переменной от определения переменной?
4. Почему функции из программы, имитирующей работу калькулятора в главе 6, нельзя использовать, не объявив их заблаговременно?
5. Чем является инструкция
int a;6. Почему следует инициализировать переменные при их объявлении?
7. Из каких элементов состоит объявление функции?
8. Какую пользу приносит включение файлов?
9. Для чего используются заголовочные файлы?
10. Какую область видимости имеет объявление?
11. Перечислите разновидности областей видимости. Приведите пример каждой из них.
12. В чем заключается разница между областью видимости класса и локальной областью видимости?
13. Почему программист должен минимизировать количество глобальных переменных?
14. В чем заключается разница между передачей аргумента по значению и передачей аргумента по ссылке?
15. В чем заключается разница между передачей аргумента по значению и передачей по константной ссылке?
16. Что делает функция
swap()17. Следует ли определять функцию с параметром типа
vector<double>18. Приведите пример неопределенного порядка выполнения вычислений. Какие проблемы создает неопределенный порядок вычислений?
19. Что означают выражения
x&&yx||y20. Соответствуют ли стандарту языка С++ следующие конструкции: функции внутри функций, функции внутри классов, классы внутри классов, классы внутри функций?
21. Что входит в активационную запись?
22. Что такое стек вызовов и зачем он нужен?
23. Для чего нужны пространства имен?
24. Чем пространство имен отличается от класса?
25. Объясните смысл объявления
using26. Почему следует избегать директив
using27. Опишите пространство имен
stdТермины

Упражнения
1. Модифицируйте программу-калькулятор из главы 7, чтобы поток ввода стал явным параметром (как показано в разделе 8.5.8). Кроме того, напишите конструктор класса
Token_streamistream&2. Напишите функцию
print()coutvector3. Создайте вектор чисел Фибоначчи и выведите их на печать с помощью функции из упр. 2. Для того чтобы создать вектор, напишите функцию
fibonacci(x,y,v,n)xyintvvector<int>nv;v[0]xv[1]yfibonacci()xy4. Переменная типа
intfibonacci()5. Напишите две функции, изменяющие порядок следования элементов в объекте типа
vector<int>vectorvectorswap