Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант_№29.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
404 Кб
Скачать
☆

Классы и потоки ввода-вывода

Ввод-вывод в С++, также как и в С, рассматривается как поток данных, управляемый с помощью функций ввода-вывода. В С++ для поддержки ввода-вывода данных используется целая иерархия классов.

Основополагающим базовым классом является класс ios. Производными от него являются классы istream – поддерживает базовые операции ввода, os­tream – поддерживает базовые операции вывода. Двунаправленный поток под­держивается классом iostream, производным от istream и ostream, что можно представить схемой:

ios

____________|_________

| |

istream ostream

|_____________________|

|

iostream

Объявления этих классов ввода-вывода помещено в заголовочный файл, который нужно подключить к программе строкой:

#include<iostream.h>

Начав с определения потока как абстракции для моделирования прохо­ждения потока данных от источника к приемнику, класс iostream обеспечивает иерархию классов для управления буферированным и непосредственным вво­дом-выводом для устройств и файлов. Пользователь может создавать собствен­ные классы ввода-вывода на базе стандартных классов.

Стандартный ввод-вывод

С++ поддерживает четыре предопределенных потоковых объекта:

  1. cin – стандартный ввод, как правило с клавиатуры, аналог stdin в С (объект класса istream).

  2. cout – стандартный вывод, как правило на экран, аналог stdout в C (объект класса ostream).

  3. cerr – стандартный небуферизованный вывод ошибок, как правило на экран, аналог stderr в С (объект класса ostream).

  4. clog – буферизованный вывод ошибок, нет аналога в С (объект класса ostream).

Можно переназначать стандартные потоки на другие устройства и файлы.

Для каждого потока "перегружены" (переопределены) два оператора:

>> – оператор извлечения (чтения) из потока (для ввода с клавиатуры: "считать из");

<< – оператор записи (вставки) в поток (для вывода на экран: "вывести на").

Замещающие функции способны воспринимать аргументы любых основ­ных типов данных (char, char*(string), int, long, float, double) и могут быть расширены для того, чтобы воспринимать аргументы типа class.

Ввод для встроенных типов

Файл заголовков iostream.h содержит объявление объекта вида:

istream cin;

Класс iostream определяет оператор ввода >> для набора стандартных ти­пов:

class istream

{ // …

public: // общедоступные функции

istream & operator >> (char&); // символ

istream & operator >> (char*); // символьная строка

istream & operator >> (short&); // короткий целый

istream & operator >> (int&); // целый

istream & operator >> (long&); // длинный целый

istream & operator >> (float&); // действительный

istream & operator >> (double&); // двойной действительный

}

Операция >> (извлечения, чтения) заменяет функцию ввода scanf() и луч­ше защищает от ошибок. Левый операнд – это объект типа класса istream. Пра­вый операнд может быть любого типа, для которого определен ввод потока. По умолчанию оператор >> опускает пробельные символы, а затем считывает сим­волы, соответствующие типу вводимого данного. Функции преобразования и форматирования данных зависят от их типов.

Для ввода-вывода можно строить цепочки операций слева направо. Например, так можно ввести несколько данных в С++:

int i; float f;

cin >> I >> f;

Для всех числовых типов в случае, когда первый непробельный символ не является цифрой, или знаком, или точкой (для вещественных чисел) поток вхо­дит в состояние ошибки и вплоть до сброса состояния ошибки любой дальней­ший ввод запрещен.

Для целых типов short, int, long действие операции >> по умолчанию заклю­чается в пропуске пробельных символов и преобразовании целого значения пу­тем чтения символов ввода до символа, который не является допустимым для данного типа.

Для типов с плавающей точкой float и double действие операции >> со­стоит в пропуске пробельных символов и преобразовании значения с плаваю­щей точкой до символа, который не может быть частью числа с плавающей точ­кой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]