The site is loading…

https://docs.google.com/document/d/19Nl9-33m5tZruWxhdzQ9anPBUJcXwU0BxqEnrvcpsjM/edit

main:

  1. #include <iostream>
  2. #include "verem.h"
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7. 	Stack<int> verem;
  8. 	verem.push(1);
  9. 	cout << verem.top() <<endl;
  10. 	return 0;
  11. }

verem.h:

  1. #ifndef VEREM_H_INCLUDED
  2. #define VEREM_H_INCLUDED
  3.  
  4. #define DEFAULT_SIZE 5
  5. template <typename t>
  6. class Stack {
  7. public:
  8. 	Stack(int=DEFAULT_SIZE);
  9.  
  10. 	void push(t);
  11. 	t pop();
  12. 	t top()const {return _array[_top];}
  13.  
  14. 	int size()const {return _top;}
  15. 	int maxSize()const {return _max;}
  16.  
  17. 	void clear();
  18. 	bool isEmpty()const{return -1==_top;}
  19.  
  20. 	Stack(const Stack&);
  21. 	Stack& operator = (const Stack&);
  22. 	~Stack();
  23. private:
  24. 	t* _array;
  25. 	int _top;
  26. 	int _max;
  27. };
  28.  
  29. #endif // VEREM_H_INCLUDED
  30.  
  31. using std::cout;
  32. using std::endl;
  33.  
  34. template <typename t>
  35. Stack<t>::Stack(int max_):_top(-1),_max(max_)
  36. {
  37. 	if(max_>0)
  38.     	_array=new t[max_];
  39. 	else
  40. 	{
  41.     	cout<<"The max size must be >0!!"<<endl;
  42.     	_array=new t[DEFAULT_SIZE];
  43.     	_max=DEFAULT_SIZE;
  44. 	}
  45. }
  46.  
  47. template <typename t>
  48. void Stack<t>::push(t item_)
  49. {
  50. 	if(_top!=_max)
  51.     	_array[++_top]=item_;
  52. 	else
  53.     	cout<<"The stack is full!!"<<endl;//Iparban is használt megoldás: throw "full"; az "xy" helyett valami exception leszármazotatt szoktak dobni.
  54. }
  55.  
  56. template <typename t>
  57. t Stack<t>::pop()
  58. {
  59. 	if(_top!=-1)
  60.     	return _array[_top--];
  61. 	else
  62.     	cout<<"The stack is empty"<<endl;//Iparban is használt megoldás: throw "empty"; az "xy" helyett valami exception leszármazotatt szoktak dobni.
  63. }
  64.  
  65. template <typename t>
  66. void Stack<t>::clear()
  67. {
  68. 	delete[] _array;
  69. 	_array=new t[_max];
  70. 	_top=-1;
  71. }
  72.  
  73. template <typename t>
  74. //deep copy meg kell írni mivel az _array dinamikusan van foglalva
  75. Stack<t>::Stack(const Stack& stack_)
  76. {
  77. 	_max=stack_._max;
  78. 	_top=stack_._top;
  79. 	_array=new t[_max];
  80. 	for(int i=0;i<=_top;++i)
  81.     	_array[i]=stack_._array[i];
  82.  
  83. }
  84.  
  85. template <typename t>
  86. Stack<t>& Stack<t>::operator = (const Stack& stack_)
  87. {
  88.  	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
  89. 	_max=stack_._max;
  90. 	_top=stack_._top;
  91. 	_array=new t[_max];
  92. 	for(int i=0;i<=_top;++i)
  93.     	_array[i]=stack_._array[i];
  94. 	return *this;
  95. }
  96.  
  97. template <typename t>
  98. Stack<t>::~Stack()
  99. {
  100. 	delete[] _array;
  101. }

Leave a Reply