#include <stdio.h>
class Ana
{
int x;
public :
Ana( int c) ;
~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) { 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) { 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 )
{
printf ( "\n ****** c > 10\n " ) ;
}
catch ( Ana :: B )
{
printf ( "\n ****** c == 0\n " ) ;
}
catch ( Ana :: A )
{
printf ( "\n ****** c < 0\n " ) ;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgogCmNsYXNzIEFuYQogCnsKICAgIGludCB4OwogCnB1YmxpYzoKIAogICAgQW5hKGludCBjKTsgCiAKICAgIH5BbmEoKSB7fQogICAgCiAgICBpbnQgZ2hmKCkgY29uc3Qge3JldHVybiB4O30KIAogICAgY2xhc3MgQSAKICAgIAogICAgeyAKICAgIAogICAgcHVibGljOiAKICAgICAgICAKICAgICAgICBBKCkge3ByaW50ZigiXG5LT05TVFJVS1RPUiBBICVwXG4iLHRoaXMpO30KCgkJQShjb25zdCBBICYgcmhzKSB7cHJpbnRmKCJcbktPTlNUUlVLVE9SIEEgY29weSAlcCAlcFxuIix0aGlzLCYgcmhzKTt9CiAKICAgICAgICB+QSgpIHtwcmludGYoIlxuREVTVFJVS1RPUiBBICVwXG4iLHRoaXMpO30KICAgIH07CiAKICAgIGNsYXNzIEIgOiBwdWJsaWMgQSAKICAgIAogICAgewogICAgCiAgICBwdWJsaWM6IAogICAgICAgIAogICAgICAgIEIoKSB7cHJpbnRmKCJcbktPTlNUUlVLVE9SIEIgJXBcbiIsdGhpcyk7fQoKCQlCKGNvbnN0IEIgJiByaHMpIHtwcmludGYoIlxuS09OU1RSVUtUT1IgQiBjb3B5ICVwICVwXG4iLHRoaXMsJiByaHMpO30KIAogICAgICAgIH5CKCkge3ByaW50ZigiXG5ERVNUUlVLVE9SIEIgJXBcbiIsdGhpcyk7fQogICAgfTsKIAogICAgY2xhc3MgQyA6IHB1YmxpYyBCIAogICAgCiAgICB7CiAgICAKICAgIHB1YmxpYzogCiAgICAgICAgCiAgICAgICAgQygpIHtwcmludGYoIlxuS09OU1RSVUtUT1IgQyAlcFxuIix0aGlzKTt9CgoJCUMoY29uc3QgQyAmIHJocykge3ByaW50ZigiXG5LT05TVFJVS1RPUiBDIGNvcHkgJXAgJXBcbiIsdGhpcywmIHJocyk7fQogCiAgICAgICAgfkMoKSB7cHJpbnRmKCJcbkRFU1RSVUtUT1IgQyAlcFxuIix0aGlzKTt9CiAgICB9Owp9OwogCkFuYSA6OiBBbmEoaW50IGMpIDoKIAp4KGMpCiAKewogICAgaWYoYyA9PSAwKSB0aHJvdyBCKCk7CiAKICAgIGlmKGMgPCAwKSB0aHJvdyBBKCk7CiAKICAgIGlmKGMgPiAxMCkgdGhyb3cgQygpOwp9CiAKaW50IG1haW4oKQogCnsKICAgIHRyeQogCiAgICB7CiAgICAgICAgQW5hIHMoMTEpOwogCiAgICAgICAgcHJpbnRmKCJcbi0tLS0tLS0tICVkXG4iLHMuZ2hmKCkpOwogICAgfQogCiAKICAgIGNhdGNoIChBbmEgOjogQyApCiAKICAgIHsKICAgICAgICBwcmludGYoIlxuKioqKioqIGMgPiAxMFxuIik7CiAgICB9CiAKICAgIGNhdGNoIChBbmEgOjogQiApCiAKICAgIHsKICAgICAgICBwcmludGYoIlxuKioqKioqIGMgPT0gMFxuIik7CiAgICB9CiAKIAogICAgY2F0Y2ggKEFuYSA6OiBBICkKIAogICAgewogICAgICAgIHByaW50ZigiXG4qKioqKiogYyA8IDBcbiIpOwogICAgfQogICAgICAgIAogCiAgICAgICAgCiAKICAgICAgICByZXR1cm4gMDsKfQ==