#include #include class IntegerMember { public: IntegerMember(int member, IntegerMember* next) : member(member), next(next) { } ~IntegerMember() { delete next; } int member; IntegerMember* next; }; class IntegerStack { public: IntegerStack() : top(nullptr) { } ~IntegerStack() { delete top; } void push(int member) { top = new IntegerMember(member, top); } bool empty() { return top == nullptr; } int pop() { assert(top != nullptr); int member = top->member; IntegerMember* old = top; top = top->next; old->next = nullptr; delete old; return member; } private: IntegerMember* top; }; void print(const char* name, IntegerStack& s) { std::cout << name << ":"; while (!s.empty()) { std::cout << " " << s.pop(); } std::cout << std::endl; } int main() { IntegerStack a; a.push(1); a.push(2); a.push(3); print("a", a); }