Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 39
Текст из файла (страница 39)
Хотя во многих случаях этого не требуется(или даже это нежелательно), пользовательская функция ввода показывает,как в случае необходимости почти без усложнения программы можно выдатьприглашающее сообщение.2. Здесь создается класс inventory (инвентарь), в котором хранится названиекакого-то предмета, количество выданных на руки штук и стоимость однойштуки. В программу для этого класса включены пользовательские функцииввода и вывода.#include <iostream>#include <cstring>using namespace std;class inventory {char item[40]; // название предметаint onhand;// количество предметов на рукахdouble cost;// цена предметаpublic:inventory (char *i,int o,double c){strcpy (item, i) ;onhand = o;cost = c;}friend ostreara &operator« (ostream &stream, inventory obi;friend istream &operator» (istream ^stream, inventory &ob) ;1;ostream 5operator« (ostream sstream, inventory ob){stream « ob.item « ": " « ob.
onhand;stream « " на руках по цене $" « ob.cost « г\п';return stream;istream soperator» (istream sstream, inventory &ob){cout « "Введите название предмета: ";stream » ob.item;cout « "Введите число выданных на руки экземпляров:stream » ob. onhand;268__Самоучитель C++cout « "Введите стоимость экземпляра : " ;stream » ob.cost;return stream;int main ( )inventory ob{ "hammer", 4, 12.55);cout « ob;cin » ob;cout « ob;return 0;Упражненияения]1. Добавьте пользовательскую функцию ввода в класс strtype из упражнения Iпредыдущего раздела.2. Создайте класс для хранения целого и его наименьшего делителя.
Создайтедля этого класса пользовательские функции ввода и вывода.Проверка усвоенияматериала главыТеперь вам необходимо выполнить следующие упражнения и ответить навопросы:1. Напишите программу для вывода числа 100 в десятичной, шестнадцатеричной и восьмеричной системе счисления. (Используйте флаги форматакласса ios.)2. Напишите программу для вывода значения 1000.5364 в 20-символьномполе, с выравниванием влево, с двумя позициями после запятой и символом * в качестве символа заполнения. (Используйте флаги форматакласса ios.)3.
Перепишите ваши ответы на упражнения 1 и 2 так, чтобы использовались манипуляторы ввода/вывода.4. Покажите, как записать и как отобразить для класса cout флаги формата.Используйте функции-члены либо манипуляторы.Глава 8. Введение в систему ввода/вывода C++2695. Создайте для следующего класса пользовательские функции ввода ивывода:class pwr (int base;int exponent;double result; // результат возведения в степеньpublic:pwr(int b, int e)};pwr::pwr(int b, int e)fbase = b;exponent = e;result = 1;for{; e; e —) result = result * base;}6. Создайте класс box для хранения размеров квадрата. Для вывода изображения квадрата на экран создайте пользовательскую функцию вывода.(Способ изображения выберите любой.)Проверка усвоенияматериала в целомВ этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав.1.
Используя показанный здесь класс stack, создайте пользовательскуюфункцию вывода для вставки в поток содержимого стека. Покажите, чтофункция работает.ttinclude <iostream>using namespace std;^define SI2E 10// Объявление класса stack для хранения символовclass stack {char stck[SIZE]; // содержит стекint tos;// индекс вершины -стекаpublic:stack 0;void pushfchar ch); // помещение символа в стекchar pop0;// выталкивание символа из стека1;270Самоучитель C++I/ Инициализация стекаstack::stack(){tos=0;// Помещение символа в стекvoid stack::push(char ch}/if (tos=SIZE) {cout « "Стек полон";return;}stck[tos]=ch;tos-f-+;}// Выталкивание символа из стекаchar stack::pop()(if (tos=~0) {cout « "Стек пуст";return 0; // возврат нуля при пустом стеке}tos — ;return stckftos];}2.
Напишите программу с классом watch, который бы играл роль обычныхчасов. Используя стандартные функции времени, создайте конструкторкласса, который должен считывать и запоминать системное время. Длявывода этого времени на экран создайте пользовательскую функцию вывода.3. На основе класса, созданного для преобразования футов в дюймы, напишите пользовательскую функцию ввода, формирующую строку-приглашение для записи числа футов.
Кроме этого, напишите пользовательскуюфункцию вывода для отображения на экране как числа футов, так и числа дюймов. Включите указанные функции в программу и продемонстрируйте их работоспособность.class ft__to inches {double feet;double inches;public:void set (double f); {feet - f;inches = f * 12;iГлава 9Дополнительныевозможностиввода/вывода в C++В этой главе продолжается изучение системы ввода/вывода C++. Здесь выузнаете, как создать пользовательские манипуляторы ввода/вывода и какреализовать ввод/вывод в файл.
Запомните, система ввода/вывода C++очень богата, гибка и многофункциональна. Рассмотрение всех ее возможностей выходит за рамки данной книги, мы коснемся только наиболее важных из них.ЗамЗамечание^*-^"^--т-Представленная в этой главе система ввода/вывода C++ определена в стандарте Standard C++ и совместима с подавляющим большинством современных компиляторов C++. Если у вас устаревший или несовместимый ссовременной системой ввода/вывода компилятор, то не все описанныездесь возможности будут вам доступны.ПоБТОрение пройденногоПеред тем как продолжить, необходимо правильно ответить на следующиевопросы и сделать упражнения.1.
Напишите программу для вывода предложения: "C++ прекрасен" в полешириной 40 символов с использованием двоеточия (:) в качестве символазаполнения.2. Напишите программу для вывода результата деления 10/3 с четырьмязнаками после десятичной точки. Для этого используйте функции-членыкласса ios.3. Перепишите предыдущую программу, используя манипуляторы ввода/вывода.4. Что такое пользовательская функция вывода? Что такое пользовательскаяфункция ввода?jTg_________Самоучитель C++5. Дан следующий класс.
Создайте для него пользовательские функции ввода и вывода.class date {char date [9]; // дата хранится в виде строки: mm/dd/yypublic:// добавьте пользовательские функции ввода и вывода6. Какой заголовок должен быть включен в программу для использованияманипуляторов ввода/вывода с параметрами?7. Какие создаются встроенные потоки, когда начинается выполнение программы на C++?9.1. Созданиепользовательских манипуляторовВ дополнение к перегрузке операторов ввода и вывода вы можете создатьсвою подсистему ввода/вывода C++, определив для этого собственные манипуляторы. Использование пользовательских манипуляторов важно подвум причинам.
Во-первых, можно объединить последовательность нескольких отдельных операций по вводу/выводу в один манипулятор. Например,нередки ситуации, в которых в программе встречаются одинаковые последовательности операций ввода/вывода. Для выполнения такой последовательности можно создать пользовательский манипулятор.
Этим вы упрощаетеисходную программу и исключаете случайные ошибки. Во-вторых, пользовательский манипулятор может понадобиться, когда необходимо выполнитьввод/вывод на нестандартном оборудовании. Например, вы могли бы воспользоваться манипулятором для посылки управляющих кодов на специальный принтер или в систему оптического распознавания.Пользовательские манипуляторы — это те элементы языка, которые обеспечивают поддержку в C++ объектно-ориентированного программирования,но они также удобны и для обычных, не объектно-ориентированных программ. Как вы увидите, пользовательские манипуляторы могут помочь сделать любую программу ввода/вывода понятней и эффективней.Как вы знаете, имеется два базовых типа манипуляторов: те, которые работают с потоками ввода, и те, которые работают с потоками вывода. Однакокроме этих двух категорий имеются еще две: манипуляторы с аргументами ибез них.
Есть несколько важных отличий в способе создания манипуляторовс параметрами и без. Более того, создание манипуляторов с параметрамиявляется существенно более трудной задачей, чем создание манипуляторовбез параметров, и в этой книге не рассматривается. С другой стороны, создать пользовательский манипулятор без параметров достаточно просто, и выскоро узнаете, как это сделать.Глава 9. Дополнительные возможности ввода/вывода в C++273Все манипуляторы без параметров для вывода имеют следующую конструкцию:ostream бимя^манилулятора (ostream &поток)((I Код программы манипулятораreturn поток;}Здесь имя_манипулятора — это имя создаваемого вами пользовательскогоманипулятора, а поток ~ ссылка на вызывающий поток. Возвращаемымзначением функции является ссылка на поток.
Это необходимо в случае,когда манипулятор является частью большого выражения ввода/вывода.Важно понимать, что хотя у манипулятора и имеется в качестве единственного аргумента ссылка на поток, с которым он работает, но, когда манипулятор используется в операции вывода, его аргумент не используется.Все манипуляторы без параметров для ввода имеют следующую конструкцию:istream &кмя манипулятора, (istream йлоток){// Код программы манипулятораreturn поток;IМанипулятор ввода получает в качестве параметра ссылку на поток, для которого он вызывается.