Exercice 139
Énoncé
Quels résultats fournira ce programme :
#include
using namespace std ;
class A
{ public :
A(int n)
{ try
{ if (n==1) throw n ;
}
catch (int n)
{ cout << "dans constructeur A : " << n << "\n" ;
throw ;
}
}
} ;
main()
{ void f() ;
try
{ f() ;
}
catch (int n)
{ cout << "dans main : " << n << "\n" ;
}
cout << "fin main\n" ;
}
void f()
{
try
{ A a(1) ;
}
catch (int n)
{ cout << "dans f : " << n << "\n" ;
throw ;
}
cout << "suite f\n" ;
}
dans constructeur A : 1
dans f : 1
dans main : 1
fin main
L’exception levée par la construction de l’objet a(1) est tout d’abord interceptée par le
gestionnaire associé au bloc try du constructeur, d’où le premier message. Mais
l’instruction throw qu’il contient demande de transmettre l’exception au bloc try
englobant, à savoir ici celui figurant dans la fonction f d’où le second message. Là
encore, une instruction throw retransmet l’exception au niveau supérieur, à savoir le bloc
340
Énoncé
Quels résultats fournira ce programme :
#include
using namespace std ;
class A
{ public :
A(int n)
{ try
{ if (n==1) throw n ;
}
catch (int n)
{ cout << "dans constructeur A : " << n << "\n" ;
throw ;
}
}
} ;
main()
{ void f() ;
try
{ f() ;
}
catch (int n)
{ cout << "dans main : " << n << "\n" ;
}
cout << "fin main\n" ;
}
void f()
{
try
{ A a(1) ;
}
catch (int n)
{ cout << "dans f : " << n << "\n" ;
throw ;
}
cout << "suite f\n" ;
}
dans constructeur A : 1
dans f : 1
dans main : 1
fin main
L’exception levée par la construction de l’objet a(1) est tout d’abord interceptée par le
gestionnaire associé au bloc try du constructeur, d’où le premier message. Mais
l’instruction throw qu’il contient demande de transmettre l’exception au bloc try
englobant, à savoir ici celui figurant dans la fonction f d’où le second message. Là
encore, une instruction throw retransmet l’exception au niveau supérieur, à savoir le bloc
340
