#include <stdio.h>
class Ana
{
int x;
public :
Ana( int c) ;
Ana( const Ana & rhs) { printf ( "\n KONSTRUKTOR Ana copy %p %p\n " ,this ,& rhs) ; }
~Ana( ) { }
int ghf( ) const { return x; }
class A
{
public :
A( ) { printf ( "\n KONSTRUKTOR A %p\n " ,this ) ; }
A( const A & rhs) { printf ( "\n KONSTRUKTOR A copy %p %p\n " ,this ,& rhs) ; }
~A( ) { printf ( "\n DESTRUKTOR A %p\n " ,this ) ; }
} ;
class B : public A
{
public :
B( ) { printf ( "\n KONSTRUKTOR B %p\n " ,this ) ; }
B( const B & rhs) : A( rhs) { printf ( "\n KONSTRUKTOR B copy %p %p\n " ,this ,& rhs) ; }
~B( ) { printf ( "\n DESTRUKTOR B %p\n " ,this ) ; }
} ;
class C : public B
{
public :
C( ) { printf ( "\n KONSTRUKTOR C %p\n " ,this ) ; }
C( const C & rhs) : B( rhs) { printf ( "\n KONSTRUKTOR C copy %p %p\n " ,this ,& rhs) ; }
~C( ) { printf ( "\n DESTRUKTOR C %p\n " ,this ) ; }
} ;
} ;
Ana :: Ana ( int c) :
x( c)
{
if ( c == 0 ) throw B( ) ;
if ( c < 0 ) throw A( ) ;
if ( c > 10 ) throw C( ) ;
}
int main( )
{
try
{
Ana s( 11 ) ;
printf ( "\n -------- %d\n " ,s.ghf ( ) ) ;
}
catch ( Ana :: C & a)
{
printf ( "\n ****** c > 10\n " ) ;
}
catch ( Ana :: B & a)
{
printf ( "\n ****** c == 0\n " ) ;
}
catch ( Ana :: A & a)
{
printf ( "\n ****** c < 0\n " ) ;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgogCmNsYXNzIEFuYQogCnsKICAgIGludCB4OwogCnB1YmxpYzoKIAogICAgQW5hKGludCBjKTsgCgoJQW5hKGNvbnN0IEFuYSAmIHJocykge3ByaW50ZigiXG5LT05TVFJVS1RPUiBBbmEgY29weSAlcCAlcFxuIix0aGlzLCYgcmhzKTt9CiAKICAgIH5BbmEoKSB7fQogICAgCiAgICBpbnQgZ2hmKCkgY29uc3Qge3JldHVybiB4O30KIAogICAgY2xhc3MgQSAKICAgIAogICAgeyAKICAgIAogICAgcHVibGljOiAKICAgICAgICAKICAgICAgICBBKCkge3ByaW50ZigiXG5LT05TVFJVS1RPUiBBICVwXG4iLHRoaXMpO30KCgkJQShjb25zdCBBICYgcmhzKSB7cHJpbnRmKCJcbktPTlNUUlVLVE9SIEEgY29weSAlcCAlcFxuIix0aGlzLCYgcmhzKTt9CiAKICAgICAgICB+QSgpIHtwcmludGYoIlxuREVTVFJVS1RPUiBBICVwXG4iLHRoaXMpO30KICAgIH07CiAKICAgIGNsYXNzIEIgOiBwdWJsaWMgQSAKICAgIAogICAgewogICAgCiAgICBwdWJsaWM6IAogICAgICAgIAogICAgICAgIEIoKSB7cHJpbnRmKCJcbktPTlNUUlVLVE9SIEIgJXBcbiIsdGhpcyk7fQoKCQlCKGNvbnN0IEIgJiByaHMpIDogQShyaHMpIHtwcmludGYoIlxuS09OU1RSVUtUT1IgQiBjb3B5ICVwICVwXG4iLHRoaXMsJiByaHMpO30KIAogICAgICAgIH5CKCkge3ByaW50ZigiXG5ERVNUUlVLVE9SIEIgJXBcbiIsdGhpcyk7fQogICAgfTsKIAogICAgY2xhc3MgQyA6IHB1YmxpYyBCIAogICAgCiAgICB7CiAgICAKICAgIHB1YmxpYzogCiAgICAgICAgCiAgICAgICAgQygpIHtwcmludGYoIlxuS09OU1RSVUtUT1IgQyAlcFxuIix0aGlzKTt9CgoJCUMoY29uc3QgQyAmIHJocykgOiBCKHJocykge3ByaW50ZigiXG5LT05TVFJVS1RPUiBDIGNvcHkgJXAgJXBcbiIsdGhpcywmIHJocyk7fQogCiAgICAgICAgfkMoKSB7cHJpbnRmKCJcbkRFU1RSVUtUT1IgQyAlcFxuIix0aGlzKTt9CiAgICB9Owp9OwogCkFuYSA6OiBBbmEoaW50IGMpIDoKIAp4KGMpCiAKewogICAgaWYoYyA9PSAwKSB0aHJvdyBCKCk7CiAKICAgIGlmKGMgPCAwKSB0aHJvdyBBKCk7CiAKICAgIGlmKGMgPiAxMCkgdGhyb3cgQygpOwp9CiAKaW50IG1haW4oKQogCnsKICAgIHRyeQogCiAgICB7CiAgICAgICAgQW5hIHMoMTEpOwogCiAgICAgICAgcHJpbnRmKCJcbi0tLS0tLS0tICVkXG4iLHMuZ2hmKCkpOwogICAgfQogCiAKICAgIGNhdGNoIChBbmEgOjogQyAmYSkKIAogICAgewogICAgICAgIHByaW50ZigiXG4qKioqKiogYyA+IDEwXG4iKTsKICAgIH0KIAogICAgY2F0Y2ggKEFuYSA6OiBCICYgYSkKIAogICAgewogICAgICAgIHByaW50ZigiXG4qKioqKiogYyA9PSAwXG4iKTsKICAgIH0KIAogCiAgICBjYXRjaCAoQW5hIDo6IEEgJiBhKQogCiAgICB7CiAgICAgICAgcHJpbnRmKCJcbioqKioqKiBjIDwgMFxuIik7CiAgICB9CiAgICAgICAgCiAKICAgICAgICAKIAogICAgICAgIHJldHVybiAwOwp9