https://docs.google.com/document/d/19Nl9-33m5tZruWxhdzQ9anPBUJcXwU0BxqEnrvcpsjM/edit
main:
#include <iostream>
#include "verem.h"
using namespace std;
int main () {
Stack<int> verem;
verem.push(1);
cout << verem.top() <<endl;
return 0;
}
verem.h:
#ifndef VEREM_H_INCLUDED
#define VEREM_H_INCLUDED
#define DEFAULT_SIZE 5
template <typename t>
class Stack {
public:
Stack(int=DEFAULT_SIZE);
void push(t);
t pop();
t top()const {return _array[_top];}
int size()const {return _top;}
int maxSize()const {return _max;}
void clear();
bool isEmpty()const{return -1==_top;}
Stack(const Stack&);
Stack& operator = (const Stack&);
~Stack();
private:
t* _array;
int _top;
int _max;
};
#endif // VEREM_H_INCLUDED
using std::cout;
using std::endl;
template <typename t>
Stack<t>::Stack(int max_):_top(-1),_max(max_)
{
if(max_>0)
_array=new t[max_];
else
{
cout<<"The max size must be >0!!"<<endl;
_array=new t[DEFAULT_SIZE];
_max=DEFAULT_SIZE;
}
}
template <typename t>
void Stack<t>::push(t item_)
{
if(_top!=_max)
_array[++_top]=item_;
else
cout<<"The stack is full!!"<<endl;//Iparban is használt megoldás: throw "full"; az "xy" helyett valami exception leszármazotatt szoktak dobni.
}
template <typename t>
t Stack<t>::pop()
{
if(_top!=-1)
return _array[_top--];
else
cout<<"The stack is empty"<<endl;//Iparban is használt megoldás: throw "empty"; az "xy" helyett valami exception leszármazotatt szoktak dobni.
}
template <typename t>
void Stack<t>::clear()
{
delete[] _array;
_array=new t[_max];
_top=-1;
}
template <typename t>
//deep copy meg kell írni mivel az _array dinamikusan van foglalva
Stack<t>::Stack(const Stack& stack_)
{
_max=stack_._max;
_top=stack_._top;
_array=new t[_max];
for(int i=0;i<=_top;++i)
_array[i]=stack_._array[i];
}
template <typename t>
Stack<t>& Stack<t>::operator = (const Stack& stack_)
{
delete[] _array;// Azért kell mivel itt már létezik az objektu, a copy konstruktornál feljebb még nem létezik, hanem akkor jön létre
_max=stack_._max;
_top=stack_._top;
_array=new t[_max];
for(int i=0;i<=_top;++i)
_array[i]=stack_._array[i];
return *this;
}
template <typename t>
Stack<t>::~Stack()
{
delete[] _array;
}