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

Írjon generikus FIFO osztályt, amely

  • Képes elemeket tárolni (put)
  • A legkorábban betett elemet adja vissza (get) eltávolítva azt a FIFO-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 f1= f2=f3; értékadás működjön helyesen (f1, f2, f3 ugyanazzal a típussal példányosított FIFO 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 FIFO

{

public:

      TYPE *pData;

      unsigned elements;

 

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

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

      void get(TYPE& element);

      void put(const TYPE& newElement);

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

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

      ~FIFO(){delete[] pData;}

};

 

template<class TYPE>

void FIFO<TYPE>::put(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 FIFO<TYPE>::get(TYPE & element)

{

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

      element=pData[0];

 

      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+1];

      }

     

      delete[] pData;

      pData=pTemp;     

}

template<class TYPE>

const FIFO<TYPE>& FIFO<TYPE>::operator=(const FIFO<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, tömbben hozzuk létre)

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

 

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

      FIFO<int>f1; f1.put(1); f1.put(2);

      FIFO<int>f2(f1); int x; f2.get(x);

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

 

      return 0;

}

*/

 

 




2008.01.05. 10:45:41 |  Permalink  |  Hozzászólások száma: 2  |  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


Kapucnissuttyo Kapucnissuttyo  (2015.05.20. 21:15:31)

Rájöttem :D Bocsi (Hogy lehet törölni a kommentet)

Kapucnissuttyo Kapucnissuttyo  (2015.05.20. 21:13:39)

A get függvények a visszatérési értéke miért void? :) Hiszen a feladat specifikációja "A legkorábban betett elemet adja vissza..." Annak nem egy TYPE-al kellene visszatérnie?