Программирование исключений

Здравствуйте.Возник вопрос насчет программирования исключений. Собственно код: файл main
main ()
{
try{
 getRunning();
}

catch ( Ex_DivideByZero ex) {

cout << ex.getMessage1() << endl;
}
catch ( Ex_DivideByZero ex) {

cout << ex.getMessage2() << endl;
}
catch ( Ex_DivideByZero ex) {

cout << ex.getMessage3() << endl;
}
catch ( Ex_DivideByZero ex) {

cout << ex.getMessage4() << endl;

}
catch (Ex_DivideByZero ex) {

cout << ex.getMessage5() << endl;
}
}
Файл getRunning
int getRunning(){

 cout<<"введите цифру в диапазоне от 1 до 5 "<<endl;
 cin>>mot;
 switch (mot) {
case 1:
throw Ex_DivideByZero();
break;
case 2:
throw Ex_DivideByZero();
break;
case 3:
throw Ex_DivideByZero();
break;
case 4:
throw Ex_DivideByZero();
break;
case 5:
throw Ex_DivideByZero();
break;
} 

}
Файл Ex_DivideByZero;
class Ex_DivideByZero {
public:


char * getMessage1() const { return "1";}
char * getMessage2() const { return "2";}
char * getMessage3() const { return "3";}
char * getMessage4() const { return "4";}
char * getMessage5() const { return "5";}


};
Правильно что-то не работает..Подскажите в чем проблемка?
2 ответа

Вот так будет правильно
#include <stdexcept>
#include <iostream>

using namespace std;

class Ex_DivideByZero1 : public runtime_error
{
public:
	Ex_DivideByZero1::Ex_DivideByZero1() : runtime_error("1"){}
};

class Ex_DivideByZero2 : public runtime_error
{
public:
	Ex_DivideByZero2::Ex_DivideByZero2() : runtime_error("2"){}
};

class Ex_DivideByZero3 : public runtime_error
{
public:
	Ex_DivideByZero3::Ex_DivideByZero3() : runtime_error("3"){}
};

class Ex_DivideByZero4 : public runtime_error
{
public:
	Ex_DivideByZero4::Ex_DivideByZero4() : runtime_error("4"){}
};
class Ex_DivideByZero5 : public runtime_error
{
public:
	Ex_DivideByZero5::Ex_DivideByZero5() : runtime_error("5"){}
};


int getRunning()
{
	int mot;
	cout<<"введите цифру в диапазоне от 1 до 5 "<<endl;
 cin>>mot;
	switch (mot) {
case 1:
throw Ex_DivideByZero1();
break;
case 2:
throw Ex_DivideByZero2();
break;
case 3:
throw Ex_DivideByZero3();
break;
case 4:
throw Ex_DivideByZero4();
break;
case 5:
throw Ex_DivideByZero5();
break;
} 

}


int main ()
{
try
{
 getRunning();
}
catch ( Ex_DivideByZero1 ex) 
{
	cout << ex.what() << endl;
}
catch ( Ex_DivideByZero2 ex) 
{
	cout << ex.what() << endl;
}
catch ( Ex_DivideByZero3 ex) 
{
	cout << ex.what() << endl;
}
catch ( Ex_DivideByZero4 ex) 
{
	cout << ex.what() << endl;
}
catch ( Ex_DivideByZero5 ex) 
{
	cout << ex.what() << endl;
}
return 0;
}


Поскольку ты ловишь во всех catch исключение одного и того же типа, естественно, что уже первый из них ловит все бросаемые исключения. Сделай классы исключений разного типа (например, через шаблон с параметром int) и бросай-лови на здоровье.