Исключения
Исключения позволяют применить систематический, объектно-ориентированный подход к обработке возникающих в классах С++ ошибок. Исключения – это ошибки, возникающие во время работы программы. Программный код, который содержит операции по обработке ошибок, называется обработчиком исключительных ситуаций. В С++ для программирования исключений искользуются три ключевые слова: 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();
}
}