Исключения могут генерироваться или, как принято говорить в C++, выбрасываться либо исполнительной системой C++, стандартными функциями и т. д., либо самим программистом с помощью оператора throw. Он состоит из ключевого слова throw, за которым следует необязательное выражение.
Throw с операндом
Выражение, следующее за ключевым словом throw, можно рассматривать как фактический параметр (аргумент) в вызове функции, хотя здесь круглые скобки не обязательны. Обычно это константа или переменная, тип которой может быть любым, как встроенным, так и пользовательским. Тип операнда определяет обработчик, который будет вызван при исполнении оператора throw. На данный момент мы уже знаем достаточно, чтобы посмотреть законченный пример.
Листинг 12.1. Программа, демонстрирующая простейшие исключения
////////////////////////////////////////////////////////////////////
// SimpTypes.срр: Перехват простых исключений.
//
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
int main () (
double d = 1.0;
for (int i=0; i<4; i++) { . try {
cout << endl<< "Entering the try-block..." <<end1;
switch (i) { case 0:
throw "Throwing an exception of char*"; // Выбросить
// строку. case 1:
throw 5; // Выбросить
// целое.
default:
throw d; // Выбросить double. }
// Следующий оператор исполняться не будет
// из-за исключений.
cout<< "In the „try-block after all exceptions..." << endl;
} // Конец try-блока.
catch(int 1) { // Обработчик int.
cout << "Int thrown: " << 1 << endl;
} catch(char* str) { // Обработчик char*.
cout << "String thrown: " << str << endl;
} catch (...) { // Для всего остального.
cout << "An unknown type thrown."<< "Program will.terminate." << endl;
cin.ignore () ;
return -1; // Завершить программу. }
cout<< "End of the loop."<< endl;
} // Конец цикла.