Учимся программировать на языке C++

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА throw ДЛЯ ГЕНЕРАЦИИ ИСКЛЮЧИТЕЛЬНОЙ СИТУАЦИИ


Сам C++ не генерирует исключительные ситуации. Их генерируют ваши программы, используя оператор C++ throw. Например, внутри функции file_copy программа может проверить условие возникновения ошибки и сгенерировать исключительную ситуацию:

void file_copy(char *source, char *target)

{

char line[256];

ifstream input_file(source);

ofstream output_file(target);

if (input_file.fail())

throw(file_open_error);

else

if (output_file.fail()) throw(file_open_error);

else

{

while ((! input_file.eof()) (! input_file.fail()))

{

input_file.getline(line, sizeof(line)) ;

if (! input_file.fail()) output_file line endl;

else throw(file_read_error);

if (output_file.fail()) throw (file_write_error) ;

}

}

}

Как видите, программа использует оператор throw для генерации определенных исключительных ситуаций.

Как работают исключительные ситуации

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



Содержание раздела