You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Template on luokan malli, josta kääntäjä kääntää olion, joka on haluttua tyyppiä. Siten esimerkiksi pinoa ei tarvitse tehdä erikseen kokonaisluvuille ja reaaliluvuille, kuten seuraava esimerkki osoittaa.

Malliluokan esittely

Templaten eli  mallin esittely näyttää tavallisen luokan esittelyltä paitsi, että siinä on sana template. Seuraavassa on malli pinolle.

template <class T>
class Stack
{
  public:
  Stack(int = 10) ;
  ~Stack() { delete [] stackPtr ; }
  int push(const T&);
  int pop(T&) ;
  int isEmpty()const { return top == -1 ; }
  int isFull() const { return top == size - 1 ; }
private:
  int size ;  // elementtien määrä pinossa
  int top ;
  T* stackPtr ;
} ;

//muodostin
template <class T>
Stack<T>::Stack(int s)
{
	size = s > 0 && s < 1000 ? s : 10 ;
	top = -1 ;  // initialize stack
	stackPtr = new T[size] ;
}

 // uusi arvo pinoon
template <class T>
int Stack<T>::push(const T& item)
{
	if (!isFull())
	{
		stackPtr[++top] = item ;
		return 1 ;  // pinon täytö ok
        }
	return 0 ;  // ei mahdu enaa
}

// elementti pinosta
template <class T>
int Stack<T>::pop(T& popValue)
{
	if (!isEmpty())
	{
		popValue = stackPtr[top--] ;
		return 1 ;  // ok
	}
	return 0 ;  // ei onnistu, pino on tyhja
}
#include &ltiostream>
#include "stack.h"
using namespace std ;
void main()
{
	typedef Stack&ltfloat> FloatStack ;
	typedef Stack&ltint> IntStack ;

	FloatStack fs(5) ;
	float f = 1.1 ;
	cout << "Pushing elements onto fs" << endl ;
	while (fs.push(f))
	{
		cout << f << ' ' ;
		f += 1.1 ;
	}
	cout << endl << "Stack Full." << endl
	<< endl << "Popping elements from fs" << endl ;
	while (fs.pop(f))
		cout << f << ' ' ;
	cout << endl << "Stack Empty" << endl ;
	cout << endl ;

	IntStack is ;
	int i = 1.1 ;
	cout << "Pushing elements onto is" << endl ;
	while (is.push(i))
	{
		cout << i << ' ' ;
		i += 1 ;
	}
	cout << endl << "Stack Full" << endl
	<< endl << "Popping elements from is" << endl ;
	while (is.pop(i))
			cout << i << ' ' ;
	cout << endl << "Stack Empty" << endl ;
}

  • No labels
You must log in to comment.