Intro. to Inheritance: Overriding Member Functions
The derived class function overrides the base class function.
 
// staken.cpp: overloading functions in base and derived classes
#include <iostream.h>
#include <process.h>            // for exit()
const int MAX = 3;              // maximum size of stack

class Stack
{
   protected:                   // NOTE: can't be private
      int st[MAX];              // stack: array of integers
      int top;                  // index to top of stack
   public:
      Stack()                   // constructor
      { top = -1; }
      void push(int var)        // put number on stack
      { st[++top] = var; }
      int pop()                 // take number off stack
      { return st[top--]; }
};

class Stack2 : public Stack
{
   public:
      void push(int var)           // put number on stack
      {
         if(top >= MAX-1)   // error if stack full
         { cout << "\nError: stack is full"; exit(1); }
         Stack::push(var);   // call push() in Stack class
      }
      int pop()                    // take number off stack
      {
         if(top < 0)   // error if stack empty
         { cout << "\nError: stack is empty"; exit(1); }
         return Stack::pop();   // call pop() in Stack class
      }
};

void main()
{
   Stack2 s1;

   s1.push(11);                   // push some values onto stack
   s1.push(22);
   s1.push(33);

   cout << endl << s1.pop();      // pop some values from stack
   cout << endl << s1.pop();
   cout << endl << s1.pop();
   cout << endl << s1.pop();      // woops, pops one too many...
}