• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjątek bad_cast, metoda what().

Aruba Cloud - Virtual Private Server VPS
0 głosów
143 wizyt
pytanie zadane 5 maja 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

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 

1
komentarz 5 maja 2020 przez tkz Nałogowiec (42,020 p.)

A wiesz co robi metoda what()? http://www.cplusplus.com/reference/exception/exception/what/ zobacz co zwraca.

komentarz 5 maja 2020 przez amtrax Dyskutant (9,630 p.)
@tkz

Taak, dzięki, zabrałko std:cout

:D
komentarz 5 maja 2020 przez tkz Nałogowiec (42,020 p.)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 850 wizyt
pytanie zadane 18 kwietnia 2020 w C i C++ przez Bartosz Paterek Początkujący (410 p.)
0 głosów
2 odpowiedzi 288 wizyt
pytanie zadane 15 października 2019 w C i C++ przez Karpik Użytkownik (680 p.)
+1 głos
1 odpowiedź 309 wizyt

93,335 zapytań

142,328 odpowiedzi

322,407 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...