1) Флагов;
2) Манипуляторов;
3) Форматирующих методов.
Стандартные объекты классов потоков ввода- вывода.
Объект |
Класс |
Описание |
cin |
istream |
связывается с клавиатурой (со стандартным буфером ввода) |
cout |
ostream |
связывается с экраном (со стандартным буфером вывода) |
cerr |
ostream |
связывается с экраном (стандартный не буферизованный вывод, куда направляются сообщения об ошибках) |
clog |
ostream |
связывается с экраном (стандартный буферизованный вывод, куда направляются сообщения об ошибках) |
Перечислить способы установки ширины поля данных в потоках ввода-вывода.
1) нет.
2) setw(int) – устанавливает максимальную ширину поля вывода.
stream << setw(8);
3) int ios:: width(int) - устанавливает значение ширины поля ввода в соответствии с параметром. Действует только на один вывод.
int x_width – минимальная ширина поля ввода.
stream.width(8);
Операторы форматного ввода-вывода в классах потоков.
Соответствующие операции << и >> определены в <iostream> путем перегрузки операции сдвига. Оператор вывода «<<» называется оператором вставки, потому что он вставляет символы в поток. Аналогично оператор ввода «>>» называется оператором извлечения, потому что он извлекает символы из потока.
Перечислить способы заполнения пустых позиций в полях потоков вывода.
1) нет.
2) setfill(int) – устанавливает символ заполнитель с кодом, равным значению параметра.
stream << setfill(“a”);
3) char fill(char) - устанавливает значение текущего символа заполнения и возвращает старое значение символа.
stream.fill(“a”);
Типы данных, для которых перегружены операторы форматного ввода-вывода.
Для встроенных типов. Кроме этого, можно перегрузить так, чтобы они выводили объекты классов, определенных пользователем.
Перечислить способы установки основания системы счисления в потоках ввода-вывода.
1) stream.setf(ios::dec);
stream.setf(ios::oct);
stream.setf(ios::hex);
2) stream << dec;
stream << oct;
stream << hex;
3) нет.
Декларации оператор-функций форматного ввода потоков.
Объявление:
istream &operator >>(istream&, <имя класса>&);
Определение:
istream &operator >>(istream &stream, <имя класса>& obj)
{//тело функции извлечения
return stream;
}
(?)Перечислить функции форматного вывода данных в поток.
C: функции семейства printf: fprintf,vfprintf, printf, vprintf, sprintf, vsprintf, snprintf, vsnprintf.
Как интерпретируется следующая инструкция форматного вывода cout<<i;
Осуществляется стандартный потоковый вывод на экран значения переменной i.
Операция чтения << в качестве результата своего выполнения формирует ссылку на объект типа ostream для чтения.
Разновидности конструкторов классов файловых потоков ввода-вывода.
Каждый класс файловых потоков содержит конструкторы, с помощью которых можно создавать объекты этих классов различными способами. Конструкторы без параметров создают объект соответствующего класса, не связывая его с файлом. Конструктор с параметром создает объект соответствующего класса, открывает файл с указанным именем и связывает файл с объектом.
ifstream(char *name, int mode = ios::in);
ofstream(char *name, int mode = ios::out);
fstream(char *name, int mode = ios::in [ios::out] );
Вторым параметром конструктора является режим открытия файла. Если установленное по умолчанию значение не устраивает программиста, можно указать другой, составив его из битовых масок, определенных в классе ios.
in |
= 0x01; //открыт для чтения |
out |
= 0x02; // открыт для записи |
ate |
= 0x04; // установить указатель на конец файла |
app |
= 0x08; // открыть на добавление в конец |
trune |
=0x19; // если файл существует, удалить |
nocreate |
= 0x20; // если файл не существует, выдать ошибку |
noreplace |
= 0x40; // если файл существует, выдать ошибку |
binary |
= 0x80; // открыть в двоичном режиме |
(?)Как интерпретируется следующая инструкция форматного ввода cin>> i >>j;
Осуществляется стандартный ввод с клавиатуры данных, запись символов в переменную i, далее происходит запись символов в переменную j. Если считываемые типы не соответствуют заявленным типам i и j, устанавливается бит failbit. При его установке все последующие операции с потоком данных игнорируются до тех пор, пока флаг failbit не будет сброшен программой
Операции извлечения в качестве результата своего выполнения формирует ссылку на объект типа istream для извлечения.
Перечислить режимы ввода-вывода для файловых потоков.
Смотреть 13 вопрос(таблица)!
Как интерпретируется следующая инструкция форматного вывода cout<<i<<j;
Осуществляется стандартный вывод на экран данных: значений i и j.
Как открывать файловые потоки с анонимными конструкторами.
Чем обеспечена возможность сцепления операций форматного ввода-вывода.
Многократные операции поместить в поток поместить в поток выполняются в той последовательности, в которой они записаны, т.е. операция поместить в поток имеет ассоциативность слева направо. Такой способ сцепления операций поместить в поток возможен, поскольку перегруженная операция << возвращает ссылку на объект своего левого операнда, т.е. на объект stream. Аналогично для операции взять из потока.
Перечислить биты контроля состояния потоков ввода-вывода.
enum io_state { goodbit = 0x00, // никакие биты не установлены, все хорошо
eofbit = 0x01, // конец файла
failbit = 0x02, // ошибка в последней операции ввода/вывода
badbit = 0x04, // попытка выполнить неверную операцию
hardfail = 0x80 // неисправимая ошибка
};
Какой приоритет имеют операции форматного ввода-вывода по сравнению с арифметическими и логическими операциями.
Так как приоритет и ассоциативность операций не могут быть изменены посредством перегрузки, приоритет операции форматного ввода-вывода ниже по сравнению с арифметическими операциями, но выше по сравнению с логическими.
Перечислить функции контроля состояния потоков ввода-вывода.
1) iostate rdstate(); - возвращает текущее состояние флагов ошибок. Если никаких ошибок не обнаружено, возвращает goodbit, в противном случае устанавливает флаг ошибки.
*iostate – класс, является перечислением, определенным в классе ios.
2) bool bad();
bool eof();
bool fail();
bool good();
- установлен флаг – true.
Перечислить флаги управления форматом в потоках ввода-вывода.