Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тоже самое будет на экране после выполнения следующего кода



cout.setf (ios::hex | ios::showpos);

cout <<123<<" "<<123.45<<"\n";

 cout<<67<<" "<<678.9<<"\n";

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

long unsetf(long flags);

Функция возвращает значение предыдущей установки флага и сбрасывает флаги, определяемые параметром flags. Пример:

 cout.setf(ios::showpos | ios::hex);

 cout<<123<<" "<<123.45<<"\n";

 cout.unsetf(ios::showpos | ios::hex);

 cout<<123<<" "<<123.45<<"\n";

Выведет на экран

 7b +123.45

 123 123.45

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

int width(int len);

char fill(char ch);

int precision(int num);

Функция width() устанавливает ширину поля и возвращает текущую ширину. Вторая функция - fill() устанавливает текущий символ заполнения и возвращает предыдущий символ заполнения. По умолчанию используется пробел. А функция precision устанавливает точность чисел с плавающей точкой. В научном режиме эта функция определяет количество цифр после десятичной запятой. В обычной нотации функция обозначает количество выводимых цифр. Точность, установленная по умолчанию, равна 6. Функция width() воздействует только на один вывод информации, а после этого в действие вступают параметры принятые по умолчанию. В случае с остальными двумя функциями новые установки остаются действовать до их явного обновления. Приведем пример:

 cout.width(10);

 cout.fill('*');

 cout<<123<<"\n";

cout.width (10);

 cout<<456<<"\n\n";

 cout<<"Using precision\n";

 float price1 = 20.405f;

 float price2 = (float)1.9+8.0/9.0;

 cout<<price1<<"\n"<<price2<<"\n\n";

 cout.precision(2);

 cout<<price1<<"\n"<<price2<<"\n\n";

 cout.setf(ios::scientific);

 cout<<price1<<"\n"<<price2<<"\n\n";

Выведет на экран

 *******123

 *******456

 Using precision

 20.405

 2.78889

 20

 2.8

 2.04e+001

2.79e+000

А теперь мы переходим к рассмотрению второго способа форматирования ввода/вывода. Второй способ - это использование манипуляторов.

Манипуляторы являются специальными функциями, которые позволяют изменять флаги потока. Существуют манипуляторы с параметрами и без. Если Вы используете манипуляторы с параметрами, подключите файл iomanip.h

Рассмотрим манипуляторы без параметров:

ends - помещает в выходной поток нулевой символ;

endl помещает в выходной поток символ конца строки и вызывает метод flush;

flush выгружает буфер потока;

dec , hex, oct   устанавливают основания 10, 16 и 8 соответственно;

Ws    заставляет игнорировать ведущие пробелы при вводе.

Манипуляторы с параметрами

setbase (int b)  задает основание системы счисления;

resetiosflags (long f)       сбрасывает флаги, указанные в параметре;

setiosflags (long f)          устанавливает флаги, указанные в параметре;

setfill (int ch)   задает заполняющий символ;

setprecision (int n)          задает точность вещественных чисел;

Setw (int n)      задает ширину поля.

Использование манипуляторов рассмотрим на примере

 cout<<setw(5)<<setfill('*')<<22<<endl;

 cout<<hex<<11<<endl;

Выведет на экран

 ***22

 b

149) Функторы в C++ являются сокращением от "функциональные объекты". Функциональный объект является экземпляром класса С++, в котором определён operator(). Если вы определите operator() для C++ класса, то вы получите объект, который действует как функция, но может также хранить состояние. Например,

#include <iostream>

#include <string>

class SimpleFunctor {

std :: string name_;

Public :

SimpleFunctor ( const char *name) : name_(name) {}

void operator ()() { std :: cout << "Oh, hello, " << name_ << endl; }

};

int main() {

SimpleFunctor sf( "catonmat" );

sf(); // выводит "Oh, hello, catonmat" }


Поделиться:



Последнее изменение этой страницы: 2019-04-10; Просмотров: 235; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.015 с.)
Главная | Случайная страница | Обратная связь