cout « ((poch *) b)->weźRozm() « endl; return 0;
Rzutowanie klasy pochodnej na klasę podstawową jest dopuszczalne. Wszystkie funkcje klasy podstawowej są obecne w klasie pochodnej. Sytuacja odwrotna nie może mieć miejsca i nie można rzutować klasy podstawowej na klasę pochodną. Klasy pochodne często mają składowe i zmienne niewystępujące w klasie podstawowej. Można przez przypadek wskazać lub zapisać zmienne, które nie istnieją, powodując błąd.
W podanym kodzie źródłowym druga instrukcja cout wypisze na ekranie jakieś śmieci. Funkcja składowa weźRozm i używana przez nią zmienna składowa, nie są częścią klasy macierzystej. Kompilator pobierze kod z miejsca, w którym przechowuje się klasę pochodną, ale zmienna nRozm2 nie istnieje w klasie podstawowej. Jeśli różnice między klasą pochodną a klasą podstawową są wystarczająco duże, to zamiast śmieci na ekranie można wywołać naruszenie dostępu.
unikanie awarii; unikanie nieoczekiwanych wyników
Przed
int Zwolnij()
int cOdw;
if(!(—m_cOdw)) delete this; return m_cOdw;
Po
int ZwolnijO
int cOdw;
- - m_cOdw; cOdw = m_cOdw; if(!cOdw) delete this; return cOdw;