What they've had you do is implement an interface.
It seems redundant and for the moment, in the assignment, it more or less is. Here's an example that shows you how it might be useful.
You start using this stack in your code; but since you made an interface, you pass around a pointer to the fstackbase which has all the methods that you need.
Now, you realize that sometimes you want a stack based on the array of 1000 like you have. That's fine. However in other parts of your code, you want a stack based on an std::vector. You make another class that derives from fstackbase. It is forced to implement those same methods. In the rest of your code, you only need to change the one line that instantiates the fstack1 to the new class fstack2. Since you defined and stuck to using your interface, the rest of the code will compile and work correctly.