class elem { public: elem (); virtual ~ elem (); public: inline elem * get_next () { return pnext; } elem *set_next (elem * ael); elem *insert_after (elem * ael); virtual void print () { if (pnext) pnext->print (); } inline elem *invert (elem * new_pnext = 0) { elem *old_pnext = pnext; pnext = new_pnext; if (old_pnext) return old_pnext->invert (this); else return this; } private: elem * pnext; }; class elem_int:public elem { public: elem_int (int val = 0) { my_val = val; cout << "kontruktor elem_int, ustawiona wartosc: " << my_val << endl; } ~elem_int () { cout << "destruktor elem_int, przechowywana wartosc: " << my_val << endl; } public: int set_val (int val) { return my_val = val; } int get_val () { return my_val; } void print () { cout << my_val << endl; elem::print (); } private: int my_val; }; class elem_str:public elem { public: elem_str (char *val = 0); ~elem_str (); void print () { cout << my_val << endl; elem::print (); } private: char *my_val; }; class elem_float:public elem { public: elem_float (float val = 0) { my_val = val; cout << "kontruktor elem_float, ustawiona wartosc: " << my_val << endl; } ~elem_float () { cout << "destruktor elem_float, przechowywana wartosc: " << my_val << endl; } public: float set_val (float val) { return my_val = val; } float get_val () { return my_val; } void print () { cout << my_val << endl; elem::print (); } private: float my_val; };