» » » » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

На нашем литературном портале можно бесплатно читать книгу Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп, Бьёрн Страуструп . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Название: Программирование. Принципы и практика использования C++ Исправленное издание
Дата добавления: 22 август 2024
Количество просмотров: 98
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Программирование. Принципы и практика использования C++ Исправленное издание читать книгу онлайн

Программирование. Принципы и практика использования C++ Исправленное издание - читать бесплатно онлайн , автор Бьёрн Страуструп

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка.
Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие.
Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток.
Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

1 ... 92 93 94 95 96 ... 337 ВПЕРЕД
Перейти на страницу:
них должна иметь тело

{ 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> вычисляет значение (“индекс”), равное

1 ... 92 93 94 95 96 ... 337 ВПЕРЕД
Перейти на страницу:
Комментариев (0)