• Авторизация


Исключения и обработчики исключительных ситуаций 24-06-2009 16:24 к комментариям - к полной версии - понравилось!


Исключения

Исключения позволяют применить систематический, объектно-ориентированный подход к обработке возникающих в классах С++ ошибок. Исключения – это ошибки, возникающие во время работы программы. Программный код, который содержит операции по обработке ошибок, называется обработчиком исключительных ситуаций. В С++ для программирования исключений искользуются три ключевые слова: try throw и catch. Кроме этого, надо создать новый тип класса, называемый классом Exception.

class A
{
 public:
 A() {};
 class Exeption{};
 double Math(double a, double b)
 {
 if (b==0)
 throw Exeption();
 return a/b;
 }
};
void main()
{
 A obj;
 double c=0;
 try
 {
 c=obj.Math(10,0); //Error in Math
 cout<<"="<<c<<endl;
 }
 catch(A::Exeption)
 {
 cout<<"Error in Math";
 }
}

В этом примере вызывается исключение Exeption, и все проходит нормально, если изменить строчку
 c=obj.Math(10,2); //5

Случай, когда нужно генерировать разные исключения:

class A
{
 public:
 A() {};
 class ExeptionA{};
 class ExeptionB{};
 double Math(double a, double b)
 {
 if (a==0)
 throw ExeptionA(); 
 if (b==0)
 throw ExeptionB();
 return (1/a)+(1/b);
 }
};
void main()
{
 A obj;
 double c=0;
 try
 {
 c=obj.Math(0,10);
 cout<<"="<<c<<endl;
 }
 catch(A::ExeptionB)
 {
 cout<<"a parameter wrong";
 }
 catch(A::ExeptionA)
 {
 cout<<"b parameter wrong";
 }
}
Если несколько блоков catch, то будет отрабатываться только первый.

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

class A
{
 public:
 A() {};
 class Exeption
 {
 public:
 int errcode;
 Exeption():errcode(0) {};
 Exeption(int ncode):errcode(ncode) {};
 char *Gettext()
 {
 if (errcode==1)
 return "Devide by zero";
 if (errcode==2)
 return "Value can't be 1";
 return "";
 } 
 };
 double Math(double a)
 {
 if (a==0)
 throw Exeption(1); 
 if (a==1)
 throw Exeption(2);
 return 1/a;
 }
};
void main()
{
 A obj;
 double c=0;
 try
 {
 c=obj.Math(0);
 cout<<"="<<c<<endl;
 }
 catch(A::Exeption e)
 {
 cout<<"Error:"<<e.Gettext();
 }
}

 

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Исключения и обработчики исключительных ситуаций | TheLenka - Дневник Рыжей Девчонки | Лента друзей TheLenka / Полная версия Добавить в друзья Страницы: раньше»