Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - Obsługa wyjątków i obiekty klas pochodnych

jowyma 12 Lip 2015 19:54 354 2
  • #1 12 Lip 2015 19:54
    jowyma
    Poziom 22  

    Proszę o pomoc co dokładnie stanie się po wykonaniu niniejszego kodu.

    Rezerwuję pamięć na obiekt klasy C, ale tworzę także wskaźnik na obiekt z klasy A.
    Czy jeżeli tworzę wskaźnik na obiekt z klasy A to uruchomi się konstruktor z klasy A?
    Tworzenie obiektu z klasy C sprowadza się w tym przykładzie do utworzenia obiektu z klasy B, którego konstruktor wyrzuci wyjątek. Czyli nastąpi chyba wyjście z konstruktora ("wyskoczenie"?) klasy B.
    Ale skoro dojdzie do wywalenia wyjątku to chyba nie wykona się już "delete a" ?
    Nie wiem dlaczego przy wykonaniu tego kodu wyświetla się dwa razy "f.A".
    Szczerze mówiąc, to nie wiem też dokładnie jakie skutki dla wykonania programu ma wyrzucenie wyjątku - wychodzę z danej klamry, ale czy coś jeszcze?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 2
  • Pomocny post
    #2 12 Lip 2015 20:12
    -psiak-
    Poziom 32  

    http://ideone.com/VH29cB

    jowyma napisał:
    Rezerwuję pamięć na obiekt klasy C, ale tworzę także wskaźnik na obiekt z klasy A. Czy jeżeli tworzę wskaźnik na obiekt z klasy A to uruchomi się konstruktor z klasy A?
    Wskaźnik to taka wizytówka. Jak sobie wyrobisz 100 wizytówek to równoznaczne ze stworzeniem 100 twoich klonów?

    jowyma napisał:
    Tworzenie obiektu z klasy C sprowadza się w tym przykładzie do utworzenia obiektu z klasy B, którego konstruktor wyrzuci wyjątek.
    Zapomniałeś że C pochodzi od A.

    jowyma napisał:
    Czyli nastąpi chyba wyjście z konstruktora ("wyskoczenie"?) klasy B.
    Ale skoro dojdzie do wywalenia wyjątku to chyba nie wykona się już "delete a" ?
    Zgadza się nie wykona się.

    jowyma napisał:
    Nie wiem dlaczego przy wykonaniu tego kodu wyświetla się dwa razy "f.A".
    Pomijam fakt że "A.f" a nie "f.A" ... Ponieważ C pochodzi od A to odpala się konstruktor A. Po czym tworzy się obiekt składowy typu B który również pochodzi od A więc zaczyna się od konstruktora A.

    jowyma napisał:
    Szczerze mówiąc, to nie wiem też dokładnie jakie skutki dla wykonania programu ma wyrzucenie wyjątku - wychodzę z danej klamry, ale czy coś jeszcze?
    Jako skutek niszczą się już stworzone w tych klamrach obiekty (oczywiście nie licząc stworzonych dynamicznie). Zauważ że nieco inaczej zareaguje na C c;

    1
  • #3 12 Lip 2015 20:56
    jowyma
    Poziom 22  

    Dziękuję za pomoc, wszystko już jest jasne.

    0