Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет193/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   189   190   191   192   193   194   195   196   ...   256
10.4.1.3 Состояние формата 
В классе ios содержится состояние формата, которое управляется функциями flags() и setf(). По сути эти 
функции нужны, чтобы установить или отменить следующие флаги: 
class ios { 
public: 
// управляющие форматом флаги: 
enum 

skipws=01, 
// пропуск обобщенных пробелов для input 
// поле выравнивания: 
left=02, 
// добавление перед значением 
right=04, 
// добавление после значения 
internal=010, 
// добавление между знаком и значением 
//
основание целого: 
dec=020, 
// восьмеричное 
oct=040, 
// десятичное 
hex=0100, 
// шестнадцатеричное 
showbase=0200, 
// показать основание целого 
showpoint=0400, 
// выдать нули в конце 
uppercase=01000, 
// 
'E', 
'X' 

а не 'e', 'x' 
showpos=02000, 
// '+' для положительных чисел 
// запись числа типа float: 
scientific=04000, 
// 
.dddddd 
Edd 
fixed=010000, 
// 
dddd.dd 
// сброс в выходной поток: 
unitbuf=020000, 
// после каждой операции 
stdio=040000 
// после каждого символа 
}; 
//... 
}; 
Смысл флагов будет разъяснен в последующих разделах. Конкретные значения флагов зависят от 
реализации и даны здесь только для того, чтобы избежать синтаксически неверных конструкций. 
Определение интерфейса как набора флагов и операций для их установки или отмены - это оцененный 
временем, хотя и несколько устаревший прием. Основное его достоинство в том, что пользователь 
может собрать воедино набор флагов, например, так: 
const int my_io_options = 
ios::left|ios::oct|ios::showpoint|ios::fixed; 
Такое множество флагов можно задавать как параметр одной операции 
cout.flags(my_io_options); 
а также просто передавать между функциями одной программы
void your_function(int ios_options); 
void my_function() 


Бьерн Страуструп.
Язык программирования С++ 
 
269 

// 
... 
your_function(my_io_options); 
// 
... 

Множество флагов можно установить с помощью функции flags(), например: 
void your_function(int ios_options) 

int old_options = cout.flags(ios_options); 
// 
... 
cout.flags(old_options); // reset options 

Функция flags() возвращает старое значение множества флагов. Это позволяет переустановить 
значения всех флагов, как показано выше, а также задать значение отдельному флагу. Например вызов 
myostream.flags(myostream.flags()|ios::showpos); 
заставляет класс myostream выдавать положительные числа со знаком + и, в то же время, не меняет 
значения других флагов. Получается старое значение множества флагов, к которому добавляется с 
помощью операции | флаг showpos. Функция setf() делает то же самое, поэтому эквивалентная запись 
имеет вид 
myostream.setf(ios::showpos); 
После установки флаг сохраняет значение до явной отмены. 
Все-таки управление вводом-выводом с помощью установки и отмены флагов - грубое и ведущее к 
ошибкам решение. Если только вы тщательно не изучите свое справочное руководство и не будете 
применять флаги только в простых случаях, как это делается в последующих разделах, то лучше 
использовать манипуляторы (описанные в 10.4.2.1). Приемы работы с состоянием потока лучше изучить 
на примере реализации класса, чем изучая интерфейс класса. 


Достарыңызбен бөлісу:
1   ...   189   190   191   192   193   194   195   196   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет