Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тоже самое будет на экране после выполнения следующего кода ⇐ ПредыдущаяСтр 3 из 3
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; Нарушение авторского права страницы