Referat Template
Mai jos puteti citi fragmente din
Referat Template si de asemenea puteti face
Download Referat TemplateCiteste fragmente din Referat Template
Template(tipare)
sunt funcţii / clase generice create cu un mecanism de definire a unei
familii de clase/funcţii
oferă posibilitatea de a se reutiliza codul sursă.
Funcţie template
O funcţie template este o funcţie generică pentru un tip generic.
#include
#include
template T min (T a, T b)
{
return a < b ? a : b;
}
void main()
{
clrscr();
int x = 1, y = 2, z;
z = min(x, y);
cout << "z = min(" << x << "," << y << ")=" << z << endl;
float f1 = 10.1, f2 = 2.2, f3;
spune compilatorului că definiţia clasei care urmează va manipula
unul sau mai multe
tipuri nespecificate.
#include
#include
template
class Array
{
enum {size = 100};
T A[size];
public:
T& operator[](int index)
{
if(index < 0 || index > size)
{
cerr << "Index out of bounds!";
exit(1);
}
return A[index];
}
};
void main()
{ //se specifica tipul
Array ia;
Array fa;
for(int i = 0; i < 20; i++)
{
ia[i] = i*i;
fa[i] = float(i) * 1.25;
}
for(int j = 0; j < 20; j++)
cout << j << ": " << ia[j] << ", " << fa[j] << endl;
}
lu se poate observa că se aseamănă cu o clasă normală cu excepţia
liniei:
template în care se specifică că T este un parametru care
poate fi substituit şi reprezintă
numele tipului. Se poate observa că T este folosit peste tot in clasă
unde ar trebui să fie folosit tipul specific pe
care îl conţine containerul.
În main se arată cât de uşor se pot crea tablouri(arrays) care
conţin diferite tipuri de obiecte.
Array ia;
Array fa;
Compilatorul expandează template-ul Array de două ori, pentru a crea
două clase generate noi(Array_int , Array_float).
Definiţii de funcţii membre care nu sunt inline
#include
#include
#include
template class Array
{
enum {size = 100};
T A[size];
public:
T& operator[](int index);
};
template T& Array::operator[](int index)
{
if(index < 0 || index > size)
{
cerr << "Index out of bounds!
";
exit(1);
}
return A[index];
}
void main()
{
clrscr();
//se specifica tipul
Array ia;
Array fa;
for(int i = 0; i < 20; i++)
{
ia[i] = i*i;
fa[i] = float(i) * 1.25;
}
for(int j = 0; j < 20; j++)
cout << j << ": " << ia[j] << ", " << fa[j] << endl;
getch();
}
Intern, numele clasei este decorat cu elementele din lista argumentelor
template-ului pentru a realiza un identificator unic pentru numele
clasei la fiecare instanţiere a template-ului.
Definiţiile template-ului sunt speciale, de multe ori declaraţia şi
definiţia template-ului sunt specificate în fişiere header pentru
folosire uÅŸoara.
Stack.h
#ifndef __STACKTEMPLATE_H
#define __STACKTEMPLATE_H
template class Stack
{
T *v;
T *p;
int sz;
public:
Stack(int a){
sz = a;
p = new T[sz];
v = p;
}
~Stack() {
delete []v;
}
int size() const {
return p-v;
}
void push(T a);
T pop();
};
template void Stack::push(T a) {
*p = a; ++p;
}
templateT Stack::pop() {
return *--p;
}
#endif
Stack.cpp
#include
#include
#include "stack.h"
void main(void)
{
clrsç‰£â¤¨à ´»åŒ‰æ…´æÂ£æ¤¼ç‘®â€¾æ…´ä¥¢ç‘®ã„¨â¤°à ´»æ˜‰ç‰¯æ¤¨ç‘®æ¤ ã´ ã€Â