КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Потоковый ввод
Потоковый вывод Стандартные потоки cin, cout и cerr Стандартным потокам языка С stdin, stdout и stderr, объявленным в файле STDIO.H, в С++ соответствуют объекты-потоки cin, cout, cerr и clog, подключаемые посредством файла IOSTREAM.H. cin объект класса istream, связанный со стандартным потоком ввода cout объект класса ostream, связанный со стандартным потоком вывода cerr объект класса ostream, не поддерживающий буферизацию и связанный со стандартным потоком ошибок clog объект класса ostream, поддерживающий буферизацию и связанный со стандартным потоком ошибок Потоковый вывод выполняется с помощью операции включения (или помещения)<<. Стандартная операция сдвига влево << для операций вывода переопределяется. Ее левый операнд - это объект типа ostream, а правый операция может иметь любой стандартный тип, т.к. оператор << перегружен таким образом, чтобы поддерживать все стандартные типы данных. Операция << ассоциируется слева направо и возвращает ссылку на объект ostream, для которого она вызывается. Это позволяет выполнять каскад операций. Пример: printf(“ Целое число:%d,число с плавающей точкой: %f”,i,f); заменяется в С++ на cout<<”Целое число:”<<i<<”,число с плавающей точкой: ”<<f; Оператор << самостоятельно анализирует тип данных и выбирает формат их представления. Самостоятельная проработка: Перегрузка оператора << Допускается перегружать данный оператор. Прямым следствием перегрузки является возможность расширения операторов << и>> для обработки данных нестандартных типов. Ниже показано, как перегрузить оператор вывода, чтобы он мог принимать данные нового типа tclient: struct tclient {char pszname[25]; char pszaddress[30];int pszphone;} ostream& operator << (ostream& osout, tclient client) { osout<<” “<< client.pszname; osout<<” “<< client.pszaddress; osout<<” “<< client.pszphone; } Теперь для вывода содержимого структуры client необходимо задать следующий оператор: cout<<client; Эффективность операторов << и >> объясняется компактностью их программного кода. Потоковый ввод использует переопределенную операцию сдвига вправо, >>, и называется операцией извлечения, или извлечением. Левый операнд операции >> представляет собой объект типа класса istream. Как и для вывода, правый операнд может быть любого типа, для которого определен вывод потоком. Пример: scanf(“%d%f%c”,&i,&f,&c); заменяется на cin>>i>>f>>c; Нет необходимости при вводе данных ставить перед именами переменных оператор взятия адреса &,т.к. в С++ оператор >> вычисляет адрес, определяет формат и прочие особенности записи значения переменной. Рассмотрим еще один пример: int i; double d; cin >> i >> d;Последняя строка вызывает пропуск пробельных символов. Цифры, считываемые со стандартного устройства ввода (по умолчанию это клавиатура), преобразуются затем во внутренний двоичный формат и записываются в переменную i. Затем снова пропускаются пробельные символы, и наконец считывается число с плавающей точкой, которое преобразуется и записывается в переменную d. Для типа char* (рассматриваемого как строка) действие операции >> состоит в пропуске пробельных символов и записи следующих (не пробельных) символов до тех пор, пока не встретится следующий пробельный символ. Затем добавляется завершающий нулевой (0) символ. Для типа char (signed или unsigned) действие операции >> состоит в пропуске пробельных символов и записи следующего (не пробельного) символа. Самостоятельная проработка:
Перегрузка оператора >> Вы можете создавать извлечения для определенных вами типов таким же образом, как это делается со вставками. Используя информацию о структуре, определенной выше, операция >> может быть перегружена следующим образом: struct info{char name; int val; float units;} istream& operator >> (istream& s, info& m); { s >> m.name >> m.val >> m.units; return s; } В реальных прикладных программах, разумеется, вы можете добавить коды для проверки ошибок ввода. Для считывания строки ввода, такой как "capacity 1.25 liters", можно использовать следующую запись: cin >> m; Пример: struct tclient {char pszname[25]; char pszaddress[30];int pszphone;} istream& operator >> (istream& isin, tclient client) { isin>>client.pszname; isin>>client.pszaddress; isin>>client.pszphone; }
Дата добавления: 2014-01-15; Просмотров: 490; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |