Voici main()
:Attraper les exceptions polymorphically
int main()
{
B b(1,"two","three");
try
{
f1(b);
}
catch(B& b_ref)
{
cout<<"Caught B&"<<endl;
b_ref.print();
}
catch(A& a_ref)
{
cout<<"Caught A&"<<endl;
a_ref.print();
}
system("pause");
return 0;
}
Voici f1()
:
void f1(A& subject)
{
throw subject;
}
Information:
B hérite de A. A::print()
est virtuel et est réimplémenta B. capture qui attrape l'exception est catch(A& a_ref)
, ce qui, je suppose, est logique, puisque le type statique des exceptions (sujete ct) est A &. MAIS, pourquoi ne fonctionne pas B:: print()
? Le type dynamique est-il "perdu"? Seul A::print()
s'exécute dans la ligne a_ref.print();
.
Quelqu'un peut-il expliquer?
Wow cela est sorti totalement illisible. S'il vous plaît, regardez ici pour une version compréhensible de ce poste: http: //forums.devarticles.com/c-c-help-52/catching-exceptions-polymorphically-208759.html –
J'ai reformaté votre question:> – arul
Correction. N'oubliez pas de mettre en retrait le code avec 4 espaces ou mieux, sélectionnez le code et appuyez sur Ctrl + K – Aamir