|
Программирование >> Расширенная версия языка c++
То, что манипулятор ащает ссылку на вызывающий поток весьма важно. Если этого не сделать, то ваши манипуляторы нельзя будет использовать в последовательностях операций ввода или вывода. Примеры 1. Рассмотрим первый простой пример. В следующей программе создается манипулятор setup(), котор1й устанавливает ширину поля вывода, равную 10, точность, равную 4, и символ заполнения *. #include <iostream> using namespace std; Все манипуляторы без параметров для вывода имеют следующую конструкцию: ostreaim &ю1я маям1уяяора (ostream &лоток) Код програюатанипулятора i- return попток; ч . Здесь тиву-иятора - это имя создаваемого вами пользовательского манипулятора, а поток ~ ссылка на вызывающий поток. Возвращаемым значением функции является ссхлка гаток. Это необходимо в случае, когда манипулятор является частью большого выражения ввода/вывода. Важно понимать, что хотя у манипулятора и имеется в качестве единственного аргумента ссылка на поток, с которым он работает, но, когда манипулятор используется в операции вывода, его аргумент не используется. Все манипуляторы без параметров ввода имеют следующую конструкцию: istrean &им натшулятора (istream Scospok) - / /Код программы мвютулхчюра v return Манипулятор ввода получает в качестве параметра ссылку на поток, для которого он вызывается. Манипулятор должен возвращать этот поток. ostream fisetu ream fistream) : - , :-rt:v.- - Л. stream.widthdO); * stream.precision(4); stream, fill (*); . ..[.. return stream; int mainO cou <:< setup 123.1234=6; return 0; - Как можно заметить, созданный вами манипулятор setup используется в качестве части выражения ввода/вывода точно так же, как это делается с любым встраиваемым манипулятором. 2. Пользовательские манипуляторы не обязательно должны быть сложными. Например, простые манипуляторы atn() и note() обеспечивают простой и удобный способ вывода часто встречающихся слов и фраз. ♦include <iostream> using namespace std; Внимание: ostream satn (ostream sstream) { ... . . .. stream << Внимание: ; return stream; Пожалуйста, не забудьте: ostream bnote (ostream bstream) stream Пожалуйста, не забудьте: ; return stream; { cout atn Высокое напряжениеХп ; cout << note Выключить свет\п ; return 0; Несмотря на простоту, такие манипулятор адят вас от необходимости частого набора одних и тех же слов и фраз. Простой манипулятор ввода istream Sgetpass (istream Sstream) cout << \a; гудок динамика cout Введите пароль: ; return stream; . int mainO . , { V . char pw[BO]; do { cin getpass pw; } while (strcmp(pw, пароль )); couW< Пароль введен верноХп ; return 0; 1. Создайте манипулятор вывода для отображения текущего системного времени и даты. Назовите манипулятор td(). 2. Создайте манипулятор вывода sethex(), который осуществляет вывод в шестнадцатеричной системе счисления и устанавливает флаги uppercase и showbase. Кроме того, создайте манипулятор вывода reset(), который отменяет изменения, сделанные манипулятором sethex(). 3. Создайте манипулятор ввода который поочередно то считывает, то пропускает каждые десять символов потока ввода. 9.2. Основы файлового ввода/вывода Как б1ло отмечено в предыдущей главе, файловый и консольный ввод/вывод очень близко связаны. Фактически файловый ввод/вывод поддерживается той же иерархией классов, что и консольный ввод/вывод. 3. В следующей программе создается манипулятор getpass(), который вызывает гудок динамика и затем предлагает ввести пароль: linclude ,<ioatream> ., f .. ... ...;;i-3. #include <cstring> . ,; -. using namespace ;-td; rJ - . > ins.--: r
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |