Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_kollokvium_l_20_21 (1).docx
Скачиваний:
3
Добавлен:
24.08.2019
Размер:
41.63 Кб
Скачать
  1. Действия компилятора при выполнении операторов cout << k; (int k;) и cout << d; (double d;)? (л.20) стр.13

Компилятор преобразует эти переменные в текстовый вид, а программа кидает их в выходящий поток,  и выводятся на экран значения k и значение d

  1. Выполнить для структурной переменой перегрузку операторов ввода/ вывода в стандартный поток внешними функциями. (л.20) стр.14

struct complex {

float re, im;

}; //определение структурного типа

ostream& operator <<(ostream& os, const complex& cc ); //прототип функции перегрузки вывода

istream& operator >>( istream& is, complex& cc ); //прототип функции перегрузки ввода

int main()

{complex c1, c2; //определение комплексных чисел

cin >>c1; //ввод чисел istream& operator>> (istream&, complex& cc);

cin >> c2; //operator>> (cin, с2);

cout << c1; //вывод чисел ostream& operator<< (ostream&, const complex& cc);

cout << c2; // operator<< (cout, с2);

_getch();

return 0;

}

ostream& operator << (ostream& os, const complex& cc ) //внешняя функция

{ os << cc.re << " " << cc.im << endl; //поля в struct открыты

return os;

}

istream& operator >>( istream& is, complex& cc ) //внешняя функция

{ is >> cc.re >> cc.im ;

return is;

}

  1. Как проверить состояние стандартного потока ввода? (л.20) стр. 15-16

Состояния потока

проверка успешности открытия потока:

ifstream inFile ("d:\\TEST.TXT"); //поток открыт для чтения

if (!inFile) {cerr <<"error"; _getch(); exit(1);}

ifstream ifbin ("TEST.bin", ios::binary);

if (!ifbin) {cerr <<"error"; _getch(); exit(1);}

Любой поток (и стандартные в том числе) в каждый момент времени находится в некотором состоянии. Эти состояния имеют названия good, bad, fail и eof (end-of-file). Состояния определены в классе ios_base как целые статические константы:

typedef T2 iostate;

static const iostate badbit;

static const iostate eofbit;

static const iostate failbit;

static const iostate goodbit;

Эти константы называют флагами состояния потока. Значения флагов зависят от реализации, однако имена определены в стандарте. Тип T2 в typedef-объявлении зависит от реализации, но обычно это один из целых типов. В программе имена флагов записываются с префиксом класса, например, std::ios_base::eofbit. Вместо префикса ios_base можно использовать класс, производный от ios_base. В частности, в текстах программ стандартной библиотеки обычно используется более короткий префикс ios::, например std::ios::eofbit.

Методы работы с флагами (методы, работающие с битами состояния, описаны в пункте 27.4.4 стандарта):

iostate rdstate() const; // чтение всех флагов

void setstate( iostate flag ); // установка всех флагов

void clear( iostate state = goodbit ); // очистка всех флагов

Если при вызове метода аргумент отсутствует, очищаются все флаги состояния. При задании аргумента после очистки всех флагов устанавливаются указанные флаги. Для установки нескольких флагов пользуются битовыми операциями:

std::ios::eofbit | std::ios::failbit

Определены методы, с помощью которых можно определить состояние потока:

bool good() const; // следующая операция может выполняться

bool eof() const; // виден конец ввода

bool fail() const; // следующая операция не выполняется

bool bad() const; // поток испорчен