- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
{ int temp; temp = a, a=b; b=temp; }
где a и b — имена аргументов.
Попробуйте вызвать каждую из этих функций, как показано ниже.
int x = 7;
int y =9;
swap_?(x,y); // замените знак ? буквами v, r или cr
swap_?(7,9);
const int cx = 7;
const int cy = 9;
swap_?(cx,cy);
swap_?(7.7,9.9);
double dx = 7.7;
double dy = 9.9;
swap_?(dx,dy);
swap_?(dx,dy);
Какие функции и вызовы будут скомпилированы и почему? После каждой скомпилированной перестановки выведите на экран значения аргументов, чтобы убедиться, что они действительно поменялись местами. Если результат вас удивит, обратитесь к разделу 8.6.
3. Напишите программу, использующую единственный файл, содержащий пространства имен X, Y и Z, так, чтобы функция main(), приведенная ниже, работала правильно.
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
}
Каждое пространство имен должно содержать определение переменной var и функции print(), выводящей соответствующую переменную var в поток cout.
Контрольные вопросы
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&&y и x||y?
20. Соответствуют ли стандарту языка С++ следующие конструкции: функции внутри функций, функции внутри классов, классы внутри классов, классы внутри функций?
21. Что входит в активационную запись?
22. Что такое стек вызовов и зачем он нужен?
23. Для чего нужны пространства имен?
24. Чем пространство имен отличается от класса?
25. Объясните смысл объявления using.
26. Почему следует избегать директив using в заголовочных файлах?
27. Опишите пространство имен std.
Термины
Упражнения
1. Модифицируйте программу-калькулятор из главы 7, чтобы поток ввода стал явным параметром (как показано в разделе 8.5.8). Кроме того, напишите конструктор класса Token_stream и создайте параметр типа istream&, так, чтобы, когда вы поймете, как создать свои собственные потоки ввода и вывода (например, с помощью файлов), смогли использовать калькулятор, использующий их.
2. Напишите функцию print(), которая выводит в поток cout вектор целых чисел. Пусть у нее будет два аргумента: строка для комментария результатов и объект класса vector.
3. Создайте вектор чисел Фибоначчи и выведите их на печать с помощью функции из упр. 2. Для того чтобы создать вектор, напишите функцию fibonacci(x,y,v,n), в которой аргументы x и y имеют тип int, аргумент v является пустой переменной типа vector<int>, а аргумент n — это количество элементов, подлежащих записи в вектор v; элемент v[0] равен x, а v[1] — y. Число Фибоначчи — это элемент последовательности, в которой каждый элемент является суммой двух предыдущих. Например, последовательность начинается с чисел 1 и 2, за ними следуют числа 1, 2, 3, 5, 8, 13, 21... Функция fibonacci() должна генерировать такую последовательность, начинающуюся с чисел x и y.
4. Переменная типа int может хранить целые числа, не превышающие некоторого максимального числа. Вычислите приближение этого максимального числа с помощью функции fibonacci().
5. Напишите две функции, изменяющие порядок следования элементов в объекте типа vector<int>. Например, вектор 1, 3, 5, 7, 9 становится вектором 9, 7, 5, 3, 1. Первая функция, изменяющая порядок следования элементов на противоположный, должна создавать новый объект класса vector, а исходный объект класса vector должен оставаться неизменным. Другая функция должна изменять порядок следования элементов без использования других векторов. (Подсказка: как функция swap.)
6. Напишите варианты функций из упражнения 5 для класса vector<string>.
7. Запишите пять имен в вектор vector<string> name, затем предложите пользователю указать возраст названных людей и запишите их в вектор vector<double> age. Затем выведите на печать пять пар (name[i],age[i]). Упорядочьте имена (sort(name.begin(), name.end())) и выведите на печать пары (name[i], age[i]). Сложность здесь заключается в том, чтобы получить вектор age, в котором порядок следования элементов соответствовал бы порядку следования элементов вектора name. (Подсказка: перед сортировкой вектора name создайте его копию и используйте ее для получения упорядоченного вектора age. Затем выполните упражнение снова, разрешив использование произвольного количества имен).
8. Напишите простую функцию randint(), генерирующую псевдослучайные числа в диапазоне [0:MAXINT]. (Подсказка: Д. Кнут Искусство программирования, том 2.)
9. Напишите функцию, которая с помощью функции randint() из предыдущего упражнения вычисляет псевдослучайное целое число в диапазоне [a:b]: rand_in_range(int a, int b). Примечание: эта функция очень полезна для создания простых игр.
10. Напишите функцию, которая по двум объектам, price и weight, класса vector<double> вычисляет значение (“индекс”), равное