#include <iostream>
#include <exception>
class Base //: public std::exception
{
};
class Derived : public Base
{
};
void throwit( Base & e )
{
std
::cout << "Kieu cua e la " << typeid(e
).
name() << '\n'; throw e;
}
int main()
{
Derived e;
try
{
throwit( e );
}
catch( Derived& )
{
std
::cout << "Caught derived\n"; }
catch ( Base& )
{
std
::cout << "Caught base\n"; }
return 0;
}
1) Khi em để nguyên, hay bỏ kí hiệu comment // để khai báo
Code:
: public std::exception
thì cả hai trường hợp đều cho kết quả là Caught base
2) Nhưng, nếu có khai báo
Code:
class Base : public std::exception
(trong phần comment)thì kiểu của e là class Derived
còn nếu bỏ đi thì kiểu của e là class Base.
Mong các anh/chị giải thích cho em 2 hiện tượng trên. Em có đọc một số tài liệu mà còn mơ hồ quá.