My assignment is to create a first in last out data structure but it must be able to take floats and strings. function overloading is supposed to be used for the push() method. I tried figure out how to make it take strings and floats but i failed miserably so i came here hoping to get steared on the right track (Im new to this forum and still new to programming). heres my code so far.......

Code:
#include <iostream>
#define SIZE 4

class stack
{
   private:
      int top_of_stack;
      double data[SIZE];
      
   public:
      int init();
      stack();
      int push(int put_on_stack);
      float push(float put_on_stack);
      char push( char put_on_stack);
      int pop();
};


int main()
{
   using std::cout;
   using std::cin;
   using std::endl;
   stack s1;
   s1.push(58);
   s1.push(23);  
   s1.push(12);
   s1.push(23);
   s1.push(54);
   
   s1.pop();
   s1.pop();
   s1.pop();
   s1.pop();
   s1.pop();
   s1.pop();
   cin.ignore();
}

stack::stack()
{
   top_of_stack = 0;
}

int stack::init()
{
   top_of_stack = 0;
}

int stack::push(int put_on_stack)
{
   if (top_of_stack >= SIZE)
   {
      std::cout<<"Stack is Full!!"<<std::endl;
   }
   data[top_of_stack] = put_on_stack;
   ++top_of_stack;

}

float stack::push(float put_on_stack)
{
   if (top_of_stack >= SIZE)
   {
      std::cout<<"Stack is Full!!"<<std::endl;
   }
   data[top_of_stack] = put_on_stack;
   ++top_of_stack;   
}

int stack::pop()
{
   if (top_of_stack == 0)
   {
      std::cout<<"Nothing on Stack!!";
      return 0;
   }
   top_of_stack--;
   std::cout<< data[top_of_stack]<<std::endl;
}
Thanks any of your help will be greatly apreciated.