Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Таблица 17.18. Манипуляторы, определенные в объекте iomanip
setfill(ch) |
Заполнить отступ символом ch |
setprecision(n) |
Установить точность n числа с плавающей точкой |
setw(w) |
Читать или писать значение в w символов |
setbase(b) |
Вывод целых чисел с базой b |
Ранее в программах уже использовался манипулятор endl
, который "записывался" в поток вывода как будто это значение. Но манипулятор endl
— не обычное значение; он выполняет операцию: выводит символ новой строки и сбрасывает буфер.
Манипуляторы используются для двух общих категорий управления выводом: контроль представления числовых значений, а также контроль количества и расположения заполнителей. Большинство манипуляторов, изменяющих флаг формата, предоставлены парами для установки и сброса; один манипулятор устанавливает флаг формата в новое значение, а другой сбрасывает его, восстанавливая стандартное значение.
Манипуляторы, изменяющие флаг формата потока, обычно оставляют флаг формата измененным для всего последующего ввода-вывода.
Тот факт, что манипулятор вносит постоянное изменение во флаг формата, может оказаться полезным, когда имеется ряд операций ввода-вывода, использующих одинаковое форматирование. Действительно, некоторые программы используют эту особенность манипуляторов для изменения поведения одного или нескольких правил форматирования ввода или вывода. В таких случаях факт изменения потока является желательным.
Но большинство программ (и что еще важней, разработчиков) ожидают, что состояние потока будет соответствовать стандартным библиотечным значениям. В этих случаях оставленный в нестандартном состоянии поток может привести к ошибке. В результате обычно лучше отменить изменение состояния, как только оно больше не нужно.
Хорошим примером манипулятора, изменяющего состояние формата своего объекта, является манипулятор boolalpha
. По умолчанию значение типа bool
выводится как 1
или 0
. Значение true
выводится как целое число 1
, а значение false
как 0
. Это поведение можно переопределить, применив к потоку манипулятор boolalpha
:
cout << "default bool values: " << true << " " << false
<< "\nalpha bool values: " << boolalpha
<< true << " " << false << endl;
Эта программа выводит следующее:
default bool values: 1 0
alpha bool values: true false
Как только манипулятор boolalpha
"записан" в поток cout
, способ вывода логических значений изменяется. Последующие операции вывода логических значений отобразят их как "true"
или "false"
.
Чтобы отменить изменение флага формата потока cout
, применяется манипулятор noboolalpha
:
bool bool_val = get_status();
cout << boolalpha // устанавливает внутреннее состояние cout
<< bool_val
<< noboolalpha; // возвращает стандартное внутреннее состояние
Здесь формат вывода логических значений изменен только для вывода значения bool_val
. Как только это значение будет выведено, поток немедленно возвращается в первоначальное состояние.
По умолчанию целочисленные значения выводятся и читаются в десятичном формате. Используя манипуляторы hex
, oct
и dec
, базу записи числа можно изменить на восьмеричную, шестнадцатеричную и обратно на десятичную базу:
cout << "default: " << 20 << " " << 1024 << endl;
cout << "octal: " << oct << 20 << " " << 1024 << endl;
cout << "hex: " << hex << 20 << " " << 1024 << endl;
cout << "decimal: " << dec << 20 << " " << 1024 << endl;
После компиляции и запуска на выполнение эта программа выводит следующее:
default: 20 1024
octal: 24 2000
hex: 14 400
decimal: 20 1024
Обратите внимание, как и манипулятор boolalpha
, эти манипуляторы изменяют флаг формата. Они срабатывают сразу после применения и влияют на весь последующий вывод целочисленных значений, пока формат не изменит применение другого манипулятора.
Манипуляторы
hex
, oct
и dec
влияют на вывод только целочисленных операндов, но не значений с плавающей запятой.
По умолчанию при выводе числа нет никакого визуального уведомления об используемой базе. Например, 20 — это действительно 20, или восьмеричное представление числа 16? Когда числа выводятся в десятичном режиме, они отображаются, как и ожидается. Если необходимо выводить восьмеричные или шестнадцатеричные значения, вероятней всего, придется использовать также манипулятор showbase
. Он заставляет поток вывода использовать те же соглашения, что и при определении базы целочисленных констант.
• Предваряющий 0x
означает шестнадцатеричный формат.
• Предваряющий 0
означает восьмеричный формат.
• Отсутствие любого индикатора означает десятичное число.
Здесь предыдущая программа пересмотрена для использования манипулятора showbase
:
cout << showbase; // отображать базу при выводе целочисленных значений
cout << "default: " << 20 << " " << 1024 << endl;
cout << "in octal: " << oct << 20 << " " << 1024 << endl;
cout << "in hex: " << hex << 20 << " " << 1024 << endl;
cout << "in decimal: " << dec << 20 << " " << 1024 << endl;
cout << noshowbase; // возвратить состояние потока
Вывод пересмотренной программы проясняет смысл:
default: 20 1024
in octal: 024 02000
in hex: 0x14 0x400
in decimal: 20 1024
Манипулятор noshowbase
возвращает поток cout
в прежнее состояние, когда индикатор базы не отображается.
По умолчанию шестнадцатеричные значения выводятся в нижнем регистре с x
, также в нижним регистре. Манипулятор uppercase
позволяет отобразить X
и шестнадцатеричные цифры a-f
в верхнем регистре:
cout << uppercase << showbase << hex
<< "printed in hexadecimal: " << 20 << " " << 1024
<< nouppercase << noshowbase << dec << endl;
Этот оператор создает следующий вывод:
printed in hexadecimal: 0X14 0X400
Манипуляторы nouppercase
, noshowbase
и dec
применяются для возвращения потока в исходное состояние.
Контролировать можно три аспекта вывода числа с плавающей запятой.
Читать дальшеИнтервал:
Закладка: