Cześć,
Mam 3 klasy dziedziczące po sobie w następujący sposób.
class pracownik
{...}
class kelner : public pracownik
{...}
clas host : public kelner
Ćwiczę stosowanie wyjątków i mechanizmów RTTI.
Funkcja get() losuje typ obiektu i przypisuje go do wskaźnika, wskaźnik następnie przypisywany jest do referencji.
Potem program w bloku try próbuje rzutować typ wylosowanego obiektu do typu kelner.
Jeśli jest to możliwe nie zgłasza błędu, jeżeli operator dynamic_cast nie pozwala przypisać obiektu, program przechodzi do bloku catch.
Moje pytanie, dlaczego nie musiałem użyć tutaj instrukcji throw(), skąd program wie, do którego bloku catch ma przejść?
Dlaczego metoda what() wywołana dla obiektu a nic nie wyświetla?
for (int i = 0; i < 5; i++)
{
try {
p = get(); //funkcja losuje typ obiektu
pracownik & a = *p; //przypisanie do referencji
cout << "Typ obiektu to: "<<typeid(a).name(); // nazwa obiektu, który jest obsługiwany
cout<<endl;
kelner & rs = dynamic_cast<kelner &>(a); //próba rzutowania
}
catch (bad_cast & a){
a.what(); //dlaczego tutaj nie wyświetla się treść wyjątku?
continue;
}
}
Pozdrowienia