Posts

Showing posts from April, 2009

Trochę o dziedziczeniu

No więc każdy kto używał dłużej C++ na pewno korzystał lub korzysta z dziedziczenia ja w miarę niedawno miałem okazję doświadczyć ciekawej sytuacji, a oto jej uproszczona forma: # include " iostream .h" class a { public: a(){}        ~a(){ printf ("A"); } }; class b:public a { public: b(){} ~b(){ printf ("B"); } }; int main ( void ) { a* val = new b(); delete val ; system(" pause "); return 0; } No i tutaj powstaje pytanie czy wyświetlona zostanie wartość "BA " czy "A" ? Dla wielu będzie oczywiste, że wyrzucona zostanie "BA". Niestety jak to w życiu bywa nic nie jest takie proste jak się wydaje. Program wyrzuca "A" :] powód jest prosty: typ a nic nie wie o tym, że dziedziczy po nim b a to właśnie jego usuwamy. Więc dla deleta oczywiste jest żeby wywołać jedyny destruktor o którym wie czyli  a.  No i pytanie: jak to ominąć ? rozwiązanie okazuje się bardzo proste wystarczy linijkę: