Generikus verem osztály készítése

Írjon generikus Stack osztályt, amely

  • Képes elemeket tárolni (push)
  • A legutoljára betett elemet adja vissza (pop) eltávolítva azt a Stack –ből
  • Meg tudja mondani magáról, hogy üres-e (isEmpty)
  • Az osztály legyen átadható érték szerint függvényparaméterként és az s1= s2=s3; értékadás működjön helyesen (s1, s2, s3 ugyanazzal a típussal példányosított Stack template-ek)!
  • Milyen követelményeket támaszt az osztály a tárolandó típusokkal szemben (pl. operator > rendelkezésre állása)?
Írjon egy egyszerű, maximum 10 utasításból álló programrészletet, amely bemutatja az osztály szolgáltatásainak használatát.  Hibakezelést nem kell implementálnia!


A megoldásért kattints ide!

#include <assert.h>

#include<iostream>

using namespace std;

 

 

template<class TYPE>

class Stack

{

public:

      TYPE *pData;

      unsigned elements;

 

      Stack(){ pData=NULL;elements=0;}

      Stack(const Stack& theOther){pData=NULL;elements=0; *this=theOther;}

      void pop(TYPE& element);

      void push(const TYPE& newElement);

      bool isEmpty()const{return (elements==0);}

      const Stack& operator=(const Stack& theOther);

      ~Stack(){delete[] pData;}

};

 

template<class TYPE>

void Stack<TYPE>::push(const TYPE & newElement)

{

      TYPE* pTemp=new TYPE[elements+1];

     

      for(unsigned i=0; i<elements;i++)

      {

            pTemp[i]=pData[i];

      }

      pTemp[elements]=newElement;

      elements++;

      delete[] pData;

      pData=pTemp;

}

 

template<class TYPE>

void Stack<TYPE>::pop(TYPE & element)

{

      // if(elements==0) return; // Hibakezelés nem kell

      element=pData[elements-1];

 

      if(elements==1) // Ha ez volt az utolsó elem

      {

            delete[] pData;

            elements=0;

            return;

      }

 

      elements --;

      TYPE* pTemp=new TYPE[elements];

     

      for(unsigned i=0; i<elements;i++)

      {

            pTemp[i]=pData[i];

      }

     

      delete[] pData;

      pData=pTemp;     

}

template<class TYPE>

const Stack<TYPE>& Stack<TYPE>::operator=(const Stack<TYPE>& theOther)

{

      // assert(this!=&theOther); // Hibakezelés nem kell

      delete[]pData;

      elements=theOther.elements;

      if(elements==0)

      {

            pData=NULL;      

      }

      else

      {

            pData=new TYPE[elements];

            for(unsigned int i=0;i<elements;i++)

            {

                  pData[i]=theOther.pData[i];

            }

      }

      return *this;

}

 

/*

int main()

{

     

      // Előírt követelmények:

      //    - Paraméter nélküli konstruktor (new-val létrehozzuk)

      //    - Helyesen muködő operator= (másoljuk az elemeket)

 

      // Az osztály szolgáltatásainak bemutatása.

      Stack<int>f1; f1.push(1); f1.push(2);

      Stack<int>f2(f1); int x; f2.pop(x);

      Stack<int>f3; f3=f1; cout<<f3.isEmpty();

 

      return 0;

}

*/

 




2008.01.05. 10:55:21 |  Permalink  |  Hozzászólások száma: 0  |  Tárgyszavak: Sablonok


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások