Luokkamallit (Templates)
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 eli mallin esittely näyttää tavallisen luokan esittelyltä paitsi, että siinä on sana template. Seuraavassa on malli pinolle.
Code Block |
---|
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 } |
Esimerkki pinon käytöstä
Code Block |
---|
#include <iostream><iostream> #include "stack.h" using namespace std ; void main() { typedef Stack<float> <float> FloatStack ; typedef Stack<int> <int> IntStack ; FloatStack fs(5) ; float f = 1.1 ; cout << "Pushinglaitetaan elementsluku ontoreaalilukupinoon fs" << endl ; while (fs.push(f)) { cout << f << ' ' ; f += 1.1 ; } cout << endl << "StackPino Fulltäynnä." << endl << endl << "PoppingOtetaan elementselementi from fspinosta" << endl ; while (fs.pop(f)) cout << f << ' ' ; cout << endl << "Stackpino Emptytyhjä" << endl ; cout << endl ; IntStack is ; int i = 1.1 ; cout << "Pushinglaitetaan elementsluku onto iskokonaislukupinoon" << endl ; while (is.push(i)) { cout << i << ' ' ; i += 1 ; } cout << endl << "Stackpino Fulltäynnä" << endl << endl << "Poppingotetaan elementselementti from ispinosta" << endl ; while (is.pop(i)) cout << i << ' ' ; cout << endl << "Stackpino Emptytyhjä" << endl ; } |