Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Листинг 2. Форматирование с помощью манипуляторов

Читайте также:
  1. III. Задачи, решаемые организацией с помощью ИСУ и ИТУ.
  2. Trading Techniques Inc. предоставляет месячные, недельные, дневные и почасовые (60 минут) данные по всем фьючерсам с помощью сервиса загрузки данных.
  3. А вот скомпрометированная иммунная система этого сделать не в состоянии. С помощью ТФ это легко исправить.
  4. Анестезия с помощью простой маски
  5. Виды и типы манипуляторов
  6. Волевое усилие – это энергия мысли или эмоции, с помощью которой мы осуществляем переадресовку психической энергии от одного энергетического источника к другому.
  7. Воспроизведение подписи с помощью технического приема - копиирование подписи с помощью пантографа и других проекционных приборов.

/////////////////////////////////////////////////

// Manip.cpp: Демонстрация некоторых манипуляторов.

//

#include <iomanip.h>

#pragma hdrstop

#include <condefs.h>

//////////////////////////////////////////////////

// Манипулятор, определенный пользователем - звонок.

//

ostream shell(ostream &os)

{

return os<< '\a';

#pragma argsused

int main(int argc, char* argv[])

{

cout “ bell; // Тестирование манипулятора bell.

//

// Манипуляторы базы преобразования.

//

long 1 = 123456;

cout<< "Hex: "<< hex<< 1<< end1

<<"Oct: "<< oct<< 1<< end1

<< "Dec: " << dec << 1 << end1;

//

// Параметризованные манипуляторы.

//

int h=12, m=5, s=0; // To же, что в примере

// Format.cpp. cout << "The time is " << setfill('0')

<< setw(2) << h << ':'

<< setw(2) << m << ':'

<< setw(2) << s << setfillC ') << end1;

return 0;

}

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

Примечание

Создать параметризованный манипулятор не так просто. Существуют различные способы сделать это, но наиболее очевидный из них — реализация манипулятора через класс эффектора. Идея состоит вот в чем. Нужно определить для манипулятора собственный класс с конструктором, принимающим нужные параметры, •и перегрузить для этого класса операцию передачи (извлечения) соответствующего потока. После этого конструктор можно вызывать в качестве параметризованного манипулятора. Создается временный объект, который выводится в поток перегруженной операцией и удаляется. Ниже показан манипулятор, который выводит в поток свой аргумент типа unsigned в двоичной форме.

#include <iostream.h>

// Класс эффектора.

class Bin {

int val;

public:

Bin(unsigned arg) { val = arg; }

friend ostream &operator“(ostreams. Bin);

};

// Вывод числа в двоичной форме.

ostream &ooerator<<(ostream &os. Bin b) {

int cb = 1; // Контрольный бит для отсчета циклов.

do {

if (b.val <0) // Если val < 0, то старший бит = 1. os << 1;

else

os<< 0;

} while (b.vai<<= 1, cb<<= 1);

return os;

}

int main ()

(

unsigned n = Ox00ff0f34;

cout<< "Some binary: "<< Bin(n)<< end1;

return 0;

}

Рис. 1 Манипулятор, выводящий свой аргумент в двоичной форме

Форматирующие флаги

Флаги управления форматированием являются битовыми полями, хранящимися в переменной типа fmtflags (псевдоним int). Для их чтения и/или модификации могут применяться следующие функции-элементы класса ics:

Помимо функций, для управления флагами можно пользоваться манипуляторами setiosflags (аналог setf() с одним параметром) и reset-iosflags (аналог unsetf ()).

В таблице 3 описаны форматирующие флаги потоков.

Таблица 3. Форматирующие флаги класса ios

Флаг Описание
internal Если установлен, при выводе чисел знак выводится на левом краю поля вывода, а само число выравнивается по правому краю поля. Промежуток заполняется текущим символом заполнения.
dec Устанавливает десятичное представление чисел. Принимается по умолчанию.
oct Устанавливает восьмеричное представление чисел.
hex Устанавливает шестнадцатеричное представление чисел.
showbase Если установлен, то при восьмеричном и шестнадцатеричном представлении чисел выводит индикатор основания (0 для восьмеричных и Ох для шестнадцатеричных чисел).
showpoint Если установлен, для вещественных чисел всегда выводится десятичная точка.
uppercase Если установлен, шестнадцатеричные цифры от А до F, а также символ экспоненты Е выводятся в верхнем регистре.
boolalpfa Если установлен, булевы значения выводятся как слова “true/false”. В противном случае они представляются соответственно единицей и нулем.
showpos Выводит + для положительных чисел.
scientific Если установлен, вещественные числа выводятся в научной (экспоненциальной) нотации.
fixed Если установлен, вещественные числа выводятся в десятичном формате (с фиксированной точкой).
unitbuf Если установлен, поток сбрасывается после каждой операции передачи.

Несколько замечаний относительно перечисленных в таблице флагов.

Примечание

Имена перечисленных выше флагов и других констант принадлежат к области действия класса ios. Вне этого класса нужно либо воспользоваться разрешением области действия (ios:: scientific), либо обращаться к ним, как к элементам существующего объекта (cout. scientific). Мы поедпочитаем первый способ.


Дата добавления: 2015-07-11; просмотров: 138 | Нарушение авторских прав


Читайте в этой же книге: Операции извлечения и передачи в поток | Файловые потоки | Бесформатный ввод-вывод | Листинг 5. Произвольный доступ к файлу |
<== предыдущая страница | следующая страница ==>
Листинг 1. Демонстрация форматирующих функций потока| Листинг 3. форматирующие флаги потоков

mybiblioteka.su - 2015-2024 год. (0.006 сек.)