Пожалуйста, смотрите ожидаемый поток ниже кода
В этом случае исключение базового класса перехватывается как ожидаемое поведение из-за его полиморфной природы.
#include <stdio.h>
#include<iostream.h>
using namespace std;
void main() {
try {
//throw CustomException();
throw bad_alloc();
}
///due to poly morphism base class reference will
catch(exception &ex) {
cout<<"Base :"<<ex.what()<<endl;
}
catch(bad_alloc &ex) {
cout<<"Derieved :"<<ex.what()<<endl;
}
}
выход
bad_alloc
Но если я делаю пользовательское исключение, как показано в коде ниже, производный класс перехватывает исключение, даже если базовый класс catch сначала появляется в блоках catch
:
class CustomException : exception {
public :
CustomException() { }
const char * what() const throw() {
// throw new exception();
return "Derived Class Exception !";
}
};
void main() {
try {
throw CustomException();
//throw bad_alloc();
}
///due to poly morphism base class reffrence will
catch(exception &ex) {
cout<<"Base :"<<ex.what()<<endl;
}
catch(CustomException &ex) {
cout<<"Derived :"<<ex.what()<<endl;
}
}
ожидаемый результат:
Base : Derived Class Exception !
Фактический объем производства:
Derived: Derived Class Exception !