Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 74 75 76 77 78 79 < 80 > 81 82 83 84 85 86 .. 206 >> Следующая

// Использование флага формата boolalpha #include <iostream> using namespace std?
int main ( ) і
bool b;
cout « "Перед установкой флага формата boolalpha:
b = true;
cout << b << " ";
b = false;
cout << b « endl;
cout << "После установки флага формата boolalpha: b — true;
cout << boolalpha << b << " ";
b = false;
cout << b << endl;
cout << "Введите значение булева типа: ";
сіп >> boolalpha >> b; // здесь можно ввести true или. false cout << "Введенное значение: " << b;
return 0;
}
Примерный результат работы программы:
Перед установкой флага формата boolalpha: 1 О
После установки флага формата boolalpha: true false Введите значение булева типа: true Введенное значение: true
Как видите, после установки флага формата boolalpha, для обозначения вводимых и выводимых значений булева типа используются ключевые слова true и false. Отметьте, что флаг формата boolalpha необходимо устанавливать отдельно для потока сіп и отдельно для потока cout. Как и в случае с другими флагами формата, установка флага boolalpha для одного потока вовсе не подразумевает его автоматической установки для другого потока.
Глава 8. Введение в систему ввода/вывода C++
259
>ыяаЕаИЗавй*а2у
1. Выполните еще раз упражнения 1 и 2 из раздела 8.3, только теперь, вместо функций-членов и флагов формата, используйте манипуляторы ввода/вывода.
2. Составьте инструкцию для вывода числа 100 в шестнадцатеричной системе счисления с отображением основания системы счисления (Ох). Для выполнения задания воспользуйтесь манипулятором setiosflags().
3. Объясните, что дает установка флага boolalpha.
8.5. Пользовательские функции вывода
Как уже отмечалось в этой книге, одним из доводов в пользу использования операторов ввода/вывода C++, вместо аналогичных им функций ввода/вывода С, является возможность перегрузки операторов ввода/вывода для создаваемых вами классов. В этом разделе вы узнаете, как перегрузить оператор вывода «.
В языке C++ вывод иногда называется вставкой (insertion), а оператор << — оператором вставки (insertion operator). Когда вы для вывода информации перегружаете оператор «, вы создаете функцию вставки (inserter function или inserter). Рациональность этим терминам дает то, что оператор вывода вставляет (inserts) информацию в поток. Во избежание путаницы мы будем называть функцию вставки пользовательской функцией вывода.
У всех пользовательских функций вывода следующая основная форма:
о stream ?operator« (os t ream & stream, им*_класса объект)
{
// тело пользовательской функции вывода return stream,*
>
Первый параметр является ссылкой на объект типа ostream. Это означает, что поток stream должен быть потоком вывода. (Запомните, класс ostream является производным от класса ios.) Второй параметр получает выводимый объект. (Он, если для вашего приложения это нужно, тоже может быть па-раметром-ссылкой). Обратите внимание, что пользовательская функция вывода возвращает ссылку на поток stream, который имеет тип ostream. Это необходимо, если перегруженный оператор << должен использоваться в ряде последовательных выражений ввода/вывода:
cout « obi « оЬ2 « оЬЗ;
Внутри пользовательской функции вывода можно выполнить любую процедуру. То, что будет делать эта функция, полностью зависит от вас. Однако
260.
Самоучитель С < ?
в соответствии с хорошим стилем программирования, следует ограничить задачи пользовательской функции вывода только вставкой информации в поток.
Хотя это на первый взгляд может показаться странным, но пользовательская функция вывода не может быть членом класса, для работы с которым она создана. И вот почему. Если оператор-функция любого типа является членом класса, то левый операнд, который неявно передается через указатель, this, является объектом, генерирующим вызов оператор-функции. Это подразумевает, что левый операнд является объектом этого класса. Поэтому, если перегруженная оператор-функция является членом класса, тогда левый операнд должен быть объектом этого класса. Однако, когда вы создаете пользовательскую функцию вывода, левый операнд становится потоком, а не объектом класса, а правый операнд — объектом, который нужно вывести. Именно поэтому пользовательская функция вывода не может быть функци-ей-членом.
То, что пользовательская функция вывода не может быть функцией -членом на первый взгляд кажется серьезным изъяном C++, поскольку подразумевает, что все данные класса, выводимые в поток через эту функцию, должны быть открытыми, нарушая тем самым ключевой принцип инкапсуляции. Однако это не так. Несмотря на то, что пользовательские функции вывода не могут быть членами класса, для работы с которым они разработаны, они могут быть дружественными классу. В подавляющем большинстве реальных ситуаций, с которыми вам придется столкнуться при программировании ввода/вывода, перегружаемая пользовательская функция вывода будет дружественной классу, для которого она создана.
Предыдущая << 1 .. 74 75 76 77 78 79 < 80 > 81 82 83 84 85 86 .. 206 >> Следующая