Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_otvety.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.9 Mб
Скачать
  1. Ввод-вывод в файл. Сохранение объектов в файле.

Для работы с дисковыми файлами в языке С++ предусмотрен класс fstream и производные от него классы ifstream и ofstream. Для записи или считывания данных надо объявить объект соответствующего класса и связать его с файлом.

Например,

ifstream fin ( имяфайла, режимы_чтения);

ofstream fout(( имяфайла, режимы_записи);

В классе fstream для файловых объектов определены операции вставки и извлечения, так что для стандартных типов b и строкового типа string можно применять привычную запись типа fin>> …, fout<<…. Для пользовательских типов операции надо переопределять.

Двухаргументные методы read и write позволяют считывать/записывать в файл блоки двоичных данных. Количество байт в блоке является аргументом этих методов. Считываются и записываются символьные массивы типа char*; числовые типы следует преобразовывать, например, операцией reinterpret_cast<char*>.

class MyRecord;

typedef vector <MyRecord> Base;

vector<MyRecord>::iterator index ; //Определение итератора index

class MyRecord{

string Name;

int age;

public:

//Метод задания значений элементов

void InputRecord()

/* Здесь следует включить обработку ошибок ввода данных, например, в name не должны вводиться цифры, возраст не может превышать 100 и т.п.*/

{

try

{char name[30];

gets(name);

Name=name;

cin>>age;}

}

void ShowRecord()const { cout<<Name<<" "<<age<<endl;}

int GetAge()const {return age;}

// Перегрузка вставки и извлечения для файловых объектов и класса MyRecord

friend ifstream& operator >> (ifstream& s, MyRecord& obj)

{ s>>obj.Name>>obj.age; return s;}

friend ofstream& operator << (ofstream& s, MyRecord& obj)

{ s<<obj.Name<<endl<<obj.age<<endl; return s;}

  1. Обработка исключений (блоки try, throw, catch)

Под исключением понимается некоторая ситуация, возникающая при выполнении программы, вследствие появления которой нормальное продолжение программы невозможно. Дальнейшее выполнение программы определяется программистом на этапе проектирования программы и носит название обработки исключения. К исключительным ситуациям относятся ошибки выполнения. Прерывание программы пользователем или от аппаратуры (например, нажатие клавиш Ctrl-Break, сигнал таймера) как исключения не рассматриваются.

В С++ введен специальный механизм обработки исключений. Он организуется при помощи трех ключевых слов: try, catch и trow.

В блок try помещается или вся программа, или фрагмент ее, в котором может возникнуть ошибка. При возникновении ошибки возбуждается исключение (throw), которое перехватывается и обрабатывается в блоке catch.

Схема размещения такова:

try { …

throw выражение1;

….

throw выражение2;

…..

}

catch (тип арг1)

{ ….}

catch (тип арг2)

{ ….}

Выражение может быть простой переменной, ссылкой, указателем или вызовом конструктора класса. Аргументами catch должны быть соответственно типы простых переменных, ссылок, указателей или имя класса.

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

Исключения в программе могут быть организованы как иерархия классов исключений. Например, класс арифметических ошибок, класс ошибок ввода данных и др. могут быть производными классами некоторого базового класса.

do try

{ c=0;

cout<<"<1> Input from the keyboard "<<endl;

cout<<"<2> Input from a file "<<endl;

cin>>c;

if ((c!=1)&&(c!=2)) throw 1;

}

catch(...)

{

cout<<"Incorrect. Try again."<<endl;

}

while((c!=1)&&(c!=2));

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