Когда вы запустите программу, на экран будет предложено ввести любое число 4 до 8, за исключением 6. Если вы введете число, меньшее 4, программа выбросит исключение MyException; если вы введете число, большее 8, программа выбросит исключение chaг*; и, Наконец, если вы введете число 6, программа выбросит исключение целочисленного типа, значение которого равно введенному числу.
Хотя все исключения выбрасываются из функции GetValue(), перехват их производится в функции main(). Блок try в функции main() связан с тремя блоками catch. Первый блок перехватывает объект MyException, второй блок перехватывает объект char*, а третий перехватывает любое другое исключение.
Как и в случае с конструкцией if-else, порядок размещения блоков catch оказывает существенное влияние на работу программы. Блоки catch, обрабатывающие конкретные типы объектов, всегда должны размещаться первыми. Если бы в примере блок catch(...) был первым, никакой другой из блоков никогда бы не выполнялся. Причина в том, что блок catch(...) является самым общим из всех возможных и перехватывает исключение любого типа. В данном случае (как и в большинстве прочих случаев) блок catch(...) используется только для перехвата исключений, которые не были перехвачены остальными блоками catch.
#include <iostream.h>
class MyException
{
protected:
char* m_msg;
public:
MyException(char *msg) { m_msg = msg;}
~MyException(){}
char* GetError() {return m_msg;}
};
int GetValue();
int main()
{
try
{
int value = GetValue();
cout << "The value you entered is Ok." << endl;
}
catch(MyException* exception)
{
char* msg = exception->GetError();
cout << msg << endl;
}
catch(char* msg)
{
cout << msg << endl;
}
catch(...)
{
cout << "Caught unknown exception!" << endl;
}
return 0;
}
int GetValue(){
int value;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.