```
template <class T>
class Stack // an abstract stack base class
{
public:
Stack() {}
virtual void pop() = 0; // all pure
virtual T top() const = 0;
virtual void push(const T& t) = 0;
virtual unsigned int size() const = 0;
};
```

```
template <class T>
class VStack : public Stack<T> // a vector-based implementation
{
private:
vector<T> vec;
public:
VStack() {}
void pop() { vec.pop_back(); }
T top() const { return vec[vec.size() - 1];}
void push (const T& t) { vec.push_back(t);}
unsigned int size() const { return vec.size(); }
};
```

How do call these method into the main method?