Программирование >>  Расширенная версия языка c++ 

1 ... 76 77 78 [ 79 ] 80 81 82 ... 227


basic streambuf

streambuf

basic Jos

basicjstream

istream

basic ostream

ostream

basicjostream y, ,> .. .

iostream

j; ... , - ..

basic fstream

fstream

=-.:4-i . . .1 ...

basicj fstream

ifstream

-rf,- ; irr-l . ГГ.. г; .

basfc ofstream

ofstream

Имена классов для 8-разрядных символов буду ебляться далее на всем протяжении книги, поскольку как раз эти имена и следует указывать в

Подробно о классах-шаблонах, называемых также родовыми классами (generic classes), будет рассказано в главе 11, сейчас же ограничимся кратким комментарием. В классе-шаблоне определяется только форма класса без полного задания данных, с которыми он работает. После того как класс-шаблон

опреде-иен, появляется возможность создавать отдельные экземпляры этого класса. Что касается библиотеки ввода/вывода, то Standard t - создает две разные версии классов-шаблонов ввода/вывода: одну для 8-разрядных символов, а другую для широких (16-разрядных) символов. В данной книге рассказывается только о классах для 8-разрядных символов, поскольку именно они используются чаще всего.

Система ввода/вывода C++ строится на двух связанных, но различных иерархиях классов-шаблонов. Первая является производной от класса нижнего уровне eambuf. Этот класс предоставляет базу для операций нижнего уровня по вводу и выводу, а также обеспечивает надлежащую поддержку всей системы ввода/вывода C++. До тех пор, пока вы не погрузитесь в самые основы программирования непосредственно использовать класс basic streainbnf вам не понадобиться. Иерархия классов, с которой вам чаще всего придется иметь дело, является производной от класса Это

класс ввода/вывода верхнего уровня, который обеспечивает форматирование,

контроль ошибок и информацию о состоянии потока ввода/вывода. Класс basic ios является базовым для нескольких производных классов, среди которых классы и Эти классы используются соответственно для создания потоков ввода, вывода и ввода/вывода.

Как уже говорилось, библиотека ввода/вывода создает две отдельные версии иерархий классов: одну для 8-разрядных символов и другую для широких символов. В представленной ниже таблице показано соответствие имен классов-шаблонов их версиям для 8-разрядных символов (включая и те, о которых

будет рассказано в главе 9). Класс-шаблон Класс для в-разрядных символов



244 Самоучтель С++

программах. Это именно на, которые мовались в прежней библиотеке ввода/вывода, и именно по этой причине на уровне исходного кода

совместимы старая и новая библиотеки ввода/вывода.

И последнее замечание: в классе ios содержится множество функций и переменных - членов класса, которые контролируют или отображают основные операции потока ввода/вывода. Вы еще часто будете сталкиваться с классом ios. Запомните: чтобы получить доступ к этому важному классу, необходимо включить в программу заголовок <iostream>.

8.2. Форматируемый ввод/вывод

До сих пор во всех примерах этой книги для вывода информации на экран использовались форматы, заданные в C++ по умолчанию. Однако информацию можно выводить в широком диапазоне форм. При этом с помощью системы ввода/вывода С++ можно форматировать данные так же, как это делала в С функция printf(). Кроме того, можно изменять определенные параметры ввода информации.

Каждый поток ввода/вывода связан с набором флагов формата (format flags), которые управляют способом форматирования информации и представжют собой битовые маски (bitmasks). Эти маски объявлены в классе ios как данные перечислимого типа fmtflags, в котором определены следующие значения:

adjustfield : - floatfield - - right skipws -. -л \

basefield hex scientific unitbuf

boolalpha internal showbase uppercase

dec left showpoint

fixed oct showpos

Эти значения определены в классе ios и необходимы для установки или сброса флагов формата. Если вы пользуетесь устаревшим, нестандартным компилятором, может оказаться, что перечислимый тип данных fmtflags в нем не определен. В таких компиляторах для хранения флагов формата отводится длинное целое.

Когда при вводе информации в поток установлен флаг skipws, начальные невидимые символы (пробелы, табуляции и символы новой строки) отбрасываются. Когда флаг skipws сброшен, невидимые символы не отбрасываются.

Когда установлен флаг left, происходит выравнивание вывода по левому краю, Когда установлен флаг right, происходит выравнивание вывода по правому краю. Когда установлен флаг internal, для заполнения поля вывода происходит вставка пробелов между всеми цифрами и знаками числа. Если все эти флаги не установлены, то по умолчанию используется выравнивание по правому краю.



fmtflags setf (fmtflags (fjiaiw) ;

Эта функция возвращает предыдущие установки флагов формата и устанавливает новые, заданные значением флаги. (Значения всех остальных флагов не изменяются.) Например, для установки флага showpos можно воспользоваться следующей инструкцией:

п<угок ввода./аавода. sstt {±оа: :showpoa) ;

Здесь поток ввода/вывода ~ это тот поток, на который вы хотите повлиять. Обратите внимание на использование оператора расширения области види-

По умолчанию числовые значения в десятичной системе счисле-

ния. Однако основание системы счисления можно поменять. Установка флага oct ведет к тому, что вывод будет осуществляться в восьмеричной системе счисления, а установка флага hex - в шестнадцатеричной. Чтобы вернуться к десятичной системе счисления, установите флаг dec.

Установка флага showbase ведет гаводу основания системы счисления. Например, шестнадцатеричное значение IF с этим флагом будет выводиться как Ох IF.

По умолчанию при выводе значений в научной нотации символ выводится в нижнем регистре. Кроме этого, при выводе шестнадцатеричного значения символ х тоже выводится в нижнем регистре. При установке флага uppercase, эти символы выводятся в верхнем регистре.

Установка флаг wpos приводит к вхводу знака + перед положительными значениями.

Установка флага showpoint ведет к появлению десятичной точки и последующих нулей при выводе любых значений с плавающей точкой.

При установке флага scientific числа с плавающей точкой выводятся в научной нотации. При установке фла fixed числа с плавающей точкой вгво-дятся в обычной нотации. Если ни один из этих флагов не установлен,

компилятор сам выбирает подходящий способ вывода.

Если установлен флаг iinitbuf, то буфер очищается (flush) после каждой операции вставки (insertion operation).

При установленном флаг alpha значения булева типа выводятся в виде ключевых слов true и false.

Одновременно на все поля, определенные с флагами oct, dec и hex, можно сослаться с помощью флага basefield. Аналогично на поля, определенные с флагами left, right и internal, можно сослаться с помощью флага adjusffield И наконец, на поля с флагами scientific и fixed можно сослаться с помощью

флага floatfield.

Для установки флага формата пользуйтесь функцией setf(). Эта функция является членом класса ios. Здесь показана ее основная форма:



1 ... 76 77 78 [ 79 ] 80 81 82 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика