//: C01:InitExcept.cpp {-bor} // Handles exceptions from subobjects. #include <iostream> using namespace std; class Base { int i; public: class BaseExcept {}; Base(int i) : i(i) { throw BaseExcept(); } }; class Derived : public Base { public: class DerivedExcept { const char* msg; public: DerivedExcept(const char* msg) : msg(msg) {} const char* what() const { return msg; } }; Derived(int j) try : Base(j) { // Constructor body cout << "This won't print" << endl; } catch(BaseExcept&) { throw DerivedExcept("Base subobject threw");; } }; int main() { try { Derived d(3); } catch(Derived::DerivedExcept& d) { cout << d.what() << endl; // "Base subobject threw" } } ///:~
Listado 2.11. C01/InitExcept.cpp
//: C01:FunctionTryBlock.cpp {-bor} // Function-level try blocks. // {RunByHand} (Don't run automatically by the makefile) #include <iostream> using namespace std; int main() try { throw "main"; } catch(const char* msg) { cout << msg << endl; return 1; } ///:~
Listado 2.12. C01/FunctionTryBlock.cpp