Важнейшие классы и объекты потоков C++
Язык C++ предоставляет набор стандартных классов и заголовков, позволяющих вы полнять ряд наиболее важных и популярных операции ввода и вывода. Табл. 27.1 содер жит список наиболее часто используемых классов.
|
Важнейшие классы и объекты потоков C++
|
589
|
Т А Б Л И Ц А 2 7 .1 . Наиболее популярные классы потоков C++ пространства имен s td
|
|
Класс или объект
|
Задача
|
|
cout
|
Стандартный поток вывода, как правило, переадресовываемый на
|
|
cin
|
консоль
|
|
Стандартный поток ввода, как правило, используемый для чтения
|
|
cerr
|
данных в переменные
|
|
Стандартный поток вывода для ошибок
|
|
fstream
|
Класс потока ввода и вывода для файловых операций; происходит от
|
ofstream
|
классов ofstream и ifstream
|
|
Класс потока вывода для файловых операций, обычно используется
|
ifstream
|
для создания файлов
|
|
Класс потока ввода для файловых операций, обычно используется
|
|
|
для чтения из файла
|
|
stringstream
ПРИМЕЧАНИЕ
Класс потока ввода и вывода для строковых операций; происходит от классов istringstream и ostringstream; обычно используется для преобразования в строки (или из строк), а также другие типы
Объекты cout, cin и cerr являются глобальными объектами потоковых классов ostream, istream и ostream соответственно. Будучи глобальными объектами, они инициализируются перед запуском функции main ().
При использовании потокового класса есть возможность определения манипуляторов (manipulator), которые автоматически выполняют специфические действия самостоятель но. Одним из них является манипулятор s t d : :e n d l, который вы использовали для встав ки символа новой строки:
std::cout « "This lines ends here" « std::endl;
Несколько других подобных манипуляторов и флагов приведено в табл. 27.2.
А БЛ И Ц А 2 7 .2 . Наиболее используемые манипуляторы пространства имен std для работы с потоками
Манипуляторы вывода
endl
ends
Манипуляторы систем счисления
dec
Hex
oct
Манипуляторы представ ления значений с пла вающей запятой
Задача
Вставляет символ новой строки
Вставляет нулевой символ
Задача
Вынуждает поток интерпретировать ввод или отображать вывод как десятичное число
Вынуждает поток интерпретировать ввод или отображать вывод как шестнадцатеричное число
Вынуждает поток интерпретировать ввод или отображать вывод как восьмеричное число
Задача
590 ЗАНЯТИЕ 27. Применение потоков для ввода и вывода
|
Окончание табл. 27.2
|
Манипуляторы вывода
|
Задача
|
fixed
|
Вынуждает поток отображать значения в форме с ф иксирован
|
scientific
|
ной точкой
|
Вынуждает поток отображать значения в экспоненциальном
|
|
представлении
|
Манипуляторы
|
Задача
|
setprecision
|
Устанавливает точность десятичного представления как пара
|
setw
|
метр
|
Устанавливает ширину поля как параметр
|
setfill
|
Устанавливает символ заполнения как параметр
|
setbase
|
Устанавливает основание системы счисления, используя dec,
|
setiosflag
|
hex или oct как параметр
|
Устанавливает флаги через маску входного параметра типа
|
resetiosflag
|
std::ios_base::fmtflags
|
Восстанавливает исходные значения для специфического типа,
|
|
определенного содержимым std: :ios_base: :fmtflags
|
Использование объекта std: :cout для вывода отформатированных данных на консоль
Объект s t d : : c o u t, используемый для записи в поток стандартного устройства выво да, является, вероятно, самым используемым потоком в этой книге и не только. Наконец пришло время вернуться к объекту c o u t и использовать некоторые из манипуляторов для изменения способа выравнивания и отображения данных.
Изменение формата представления чисел
Объект s t d : :c o u t можно заставить отображать целые числа в шестнадцатеричном или восьмеричном формате. Листинг 27.1 демонстрирует использование объекта c o u t для отображения введенных чисел в различных форматах.
И СТИ Н Г 2 7 .1 . Отображение целого числа в десятичном, восьмеричном и шестнадцатеричном форматах с использованием объекта cout и флагов ________
#include
#include
using namespace std;
3:
int main()
{
cout << "Enter an integer:
int Input = 0;
cin » Input;
9:
10: cout « "Integer in octal: " « oct « Input « endl;
|
Использование объекта stdncout...
|
591
|
11
|
cout « "Integer in hexadecimal: " « hex « Input « endl;
|
|
12
|
|
|
cout « "Integer in hex using base notation: ";
cout « setiosflags(ios_base::hex|ios_base::showbase|ios_base \ ::uppercase);
cout « Input « endl;
16
cout « "Integer after resetting I/O flags: ";
cout « resetiosflags(ios_base::hex|ios_base::showbase|ios_base \ :uppercase) ;
cout « Input « endl;
20
return 0;
Результат
Enter an integer: 253
Integer in octal: 375
Integer in hexadecimal: fd
Integer in hex using base notation: OXFD
Integer after resetting I/O flags: 253
Анализ
Пример использует представленные в табл. 27.2 манипуляторы для изменения способа отображения объектом c o u t введенного пользователем целого числа. Обратите внимание на использование манипуляторов o c t и hex в строках 10 и И . В строке 14 функция s e t i o s f l a g s () используется для задания отображения числа прописными буквами в ш ест надцатеричном формате. В результате объект c o u t отображает введенное целое число 253 как 0XFD. В результате использования функции r e s e t i o f l a g s () в строке 18 объект c o u t снова отображает целое число в десятичном формате. Вот другой способ смены отображе ния целых чисел в десятичном формате:
cout « dec « Input « endl; // отображать в десятичном формате
формате отображения объектом c o u t таких чисел, как P i, можно также задать точ ность, т.е. определить количество знаков десятичного числа после запятой, которое бу дет представлено, либо задать отображение числа в экспоненциальном представлении (листинг 27.2).
И С ТИ Н Г 2 7 .2 . Использование объекта cout для отображения числа Pi и площади
круга в экспоненциальном представлении и с ф иксированной точкой________________________
#include
tinclude
using namespace std;
4 : int main ()
{
const double Pi = (double)22.0 / 7;
7: cout « "Pi = " « Pi « endl;
:
9: cout « endl « "Setting precision to 7: " « endl;
592 ЗАНЯТИЕ 27. Применение потоков для ввода и вывода
cout « setprecision(7);
cout « "Pi = " « Pi « endl;
12:
|
cout
|
«
|
fixed « "Fixed Pi = " «
|
Pi«
|
endl;
|
13:
|
cout
|
«
|
scientific « "Scientific
|
Pi=
|
" « Pi « endl;
|
'
cout << endl « "Setting precision to 10: " « endl;
cout « setprecision(10);
cout « "Pi = " « Pi « endl;
18:
|
cout
|
«
|
fixed « "Fixed Pi = " «
|
Pi
|
«
|
endl;
|
19:
|
cout
|
«
|
scientific « "Scientific
|
Pi
|
=
|
" << Pi « endl;
|
2 0 :
|
|
|
|
|
|
|
cout « endl « "Enter a radius: ";
22: double Radius = 0.0;
cin » Radius;
cout « "Area of circle: " « 2*Pi*Radius*Radius « endl;
return 0;
}
Результат
Pi = 3.14286
Setting precision to 7:
Pi = 3.142857
Fixed Pi = 3.1428571
Scientific Pi = 3.1428571e+000
Setting precision to 10:
Pi = 3.1428571429e+000
Fixed Pi = 3.1428571429
Scientific Pi = 3.1428571429e+000
Enter a radius: 9.99
Area of circle: 6.2731491429e+002
Анализ
Вывод демонстрирует, что при увеличении точности до 7 в строке 10 и до 10 в стро ке 16 представление значения числа P i изменяется. Обратите также внимание на то, что после применения манипулятора s c i e n t i f i c результат вычисления площади круга ото бражается как 6.2731491429е+002.
Do'stlaringiz bilan baham: |