Warum auf abgeleitete Klassenfänge nach Basis werfen?

Für den folgenden Code lautet das Ergebnis "EA Exception Finished", was bedeutet, dass die abgeleitete Klasse von der Basisklasse abgefangen wurde. Ist es immer Und wenn ja, wie kann ich die abgeleiteten Klassenfänge ausführen, sodass "EB-Ausnahme beendet" angezeigt wird?

Auch ich kann nicht genau verstehen, was es bedeutet mitthrow EB() undcatch(EA&). Und tutcatch(EA&) bedeutet, der catch-Block erhält eine Referenz für EAObjek?

Sorry für meine Unwissenheit. Wenn Sie mir ein Buch oder eine Referenz zur Ausnahmestruktur empfehlen, wäre das eine große Hilfe.

class EA {};
class EB: public EA {};

void F()
{
  throw EB();  // throw at EB().
}

int main()
{
  try
  {
    F();
  }
  catch(EA&) // caught here??
  {
    std::cout<<"EA Exception";
  }
  catch(EB&) // why not me? every time?
  {
    std::cout<<"EB Exception";
  }

  std::cout<<" Finished"<<std::endl;

  return 0;
}

Antworten auf die Frage(10)

Ihre Antwort auf die Frage