Referat Template

Mai jos puteti citi fragmente din Referat Template si de asemenea puteti face Download Referat Template

Citeste 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牣⤨഻匉慴正椼瑮‾慴䥢瑮ㄨ⤰഻昉牯椨瑮椠㴠ã€Â