/* * stackqueuelist.cpp * * Created on: 23.11.2012 * Author: trifon */ #include "lstack.cpp" #include "lqueue.cpp" #include "linked_list.cpp" class Object { public: virtual void print() const = 0; virtual ~Object() {} }; class IntStack : virtual public Object, public LStack<> { public: void print() const { cout << "Stack" << endl; LStack<>::print(); } }; class IntQueue : virtual public Object, public LQueue<> { public: void print() const { LQueue<> q = *this; int x; cout << "Queue" << endl; while (q.pop(x)) cout << x << endl; } }; class PolyList : public LinkedList, virtual public Object { public: void print() const { cout << '('; for(I it = iteratorBegin(); it; ++it) { (*it)->print(); cout << ' '; } cout << ')'; } ~PolyList() { for(I it = iteratorBegin(); it; ++it) delete (*it); } }; class Integer : public Object { private: int x; public: Integer(int _x = 0) : x(_x) {} operator int() { return x; } void print() const { cout << x; } };