//A::A() //B::B() //A::Foo #include using namespace std; class A { public: A() { cout << "A::A()" << endl;} virtual void Foo() { cout << "A::Foo";} }; class B : public A { public: B() { cout << "B::B()" << endl; } virtual void Foo() { cout << "B::Foo";} }; int main() { try { throw B(); } catch (A ex) { ex.Foo(); } catch (B &ex) { ex.Foo(); } return 0; }