Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
46
Добавлен:
11.05.2015
Размер:
807.2 Кб
Скачать

74

Отметим, что рациональнее в качестве первого

аргумента

указывать абстрактный поток stream, а не cout или

cin, для

того, чтобы операторы могли работать с любыми потоками. В качестве примера рассмотрим перегрузку операторов ввода-вывода для класса complex:

#include <iostream.h> class complex{ public:

double re, im;

complex (double r=0, double i=0) { re = r; im = i; };

friend ostream & operator << (ostream &, complex &); friend istream & operator >> (istream &, complex &);

};

ostream & operator << (ostream & stream, complex &x);

{

stream << "Комплексное число= ";

stream << "(" << x.re << "," << x.im << ")" << endl; return stream;

};

istream & operator >> (istream & stream, complex &x);

{

cout << "Введите действительную и мнимую части: "; stream >> x.re >> x.im;

return stream;

};

main(void)

{

complex a; cin >> a; cout << a;

}

Ошибки потоков ввода-вывода

С каждым открытым потоком в С++ связывается перечислимая переменная io_state, определяющая биты состояния потока. Она

объявлена в классе

ios и может рассматриваться как целая

величина:

 

 

public:

 

 

enum io_state{

 

goodbit = 0x00,

// если бит не установлен,

 

// то ошибок нет

eofbit

= 0x01,

// обнаружен конец файла

failbit

= 0x02,

// сбой в последней операции

 

// ввода-вывода

badbit

= 0x04,

// попытка недопустимой операции

hardfail = 0x80 // в потоке невосстанавливаемая ошибка

};

 

 

В случае установки eofbit игнорируются попытки выполнить

операции извлечения; бит failbit может быть сброшен и продолжено использование потока; после сброса badbit не всегда можно

74

Соседние файлы в папке Объектно-ориентированное программирование