Funksiya shabloni (parametrlangan turlar) bog’langan funksiyalar
oilasini tuzish imkonini beradi. Shablon kiritilishi uchun, hosil qilingan
funksiyani avtomatlashtirish, har xil tipli ma‘lumotlarni qayta ishlashdan iborat.
Masalan, algoritm tartiblash uchun har qaysi funksiyani o’zini
aniqlovchi tipi qo’llaniladi. Funksiya shabloni bir marta aniqlanadi,
lekin parametrli aniqlashda va hokazo, ma‘lumotlar tipi shablon
parametrlari orqali beriladi.
Shablon formati: template { } Funksiyalar shablonlari parametrlarining asosiy xususiyatlari:
1. Parametrlar nomlari shablonning butun ta‘rifi bo’ylab unikal bo’lmog’i lozim.
2. Shablon parametrlarining ro’yxati bo’sh bo’la olmaydi.
3. Shablon parametrlari ro’yxatida har biri class so’zidan
boshlanadigan bir nechta parametr bo’lishi mumkin.
Sinflar shablonlari Sinf shablonlari (o’zgacha parametrlangan sinf) avlodga oid sinfni
tuzish uchun ishlatiladi. Tuzish qoidalarni va ayrim ob‘yektlarni formatini aniqlovchi sinf kabi, sinf shablonlari ayrim sinflarni tuzish
usullarini aniqlaydi. Shablondagi sinf ta‘rifida sinf ismi ayrim sinflarning emas oilaviy sinflarning parametrlangan ismi bo’ladi.
Parametrlangan sinfni e‘lon etishning umumiy shakli: template class sinf_nomi { . . . }; Sinf ob‘yektlari bilan ishlash uchun vector qo’shimcha yuklangan
shablon sinfi:
template class vector { T *data;
int size;
public:
array(int k) {size =k; data = new T[size]};
T& operator[](int i){
return data[i]; }
int size() { return size; }
~array () { delete []data; }
void input_ vector ();
void show_ vector (); };
template void vector :: input_array() {
for (int i = 0; i < index; i++) {
cin>>data[i] ;
cout << “ ;} }
template void vector :: show_array() {
for (int i = 0; i < index; i++)
cout << data[i] << ; “ }
Oddiy shablonni pufaksimon algoritm orqali tartiblashni shunday aniqlash mumkin. template void bubble_sort(Vector& v) { unsigned n = v.size(); for (int i=0; i for (int j=n-1; i if (v[j] < v[j-1]) { // v[j] va v[j-1] o’rnini almashtiramiz T temp = v[j]; v[j] = v[j-1]; v[j-1] = temp; } } Vector tipini qismiga tenglik funksiyasini berish mumkin emas, balki unga ikkinchi parametr sort() funksiyasini berish kerak. Bu parametr qaysiki tenglik operatsiyasini qayta aniqlashda ob‘yekt sinfini ifodalaydi. template void bubble_sort(Vector& v, Compare & cmp){ unsigned n = v.size(); for (int i = 0; i for ( int j = n-1; i if (cmp.lessthan(v[j],v[j-1])) { T temp = v[j]; v[j] = v[j-1]; v[j-1] = temp; } } for_each() algoritm yordamida har xil ko’rinishdagi qayta ishlashni
va har bir elementni modifikatsiyasini ko’rish mumkin.
Template void for_each(vector a, function op){ for( int i=0; i op(a[i]); } for_each() algoritmining qo‗llanilishi: # include class StudentPrint { public: void operator() (Student elem){ if (elem.rating>5) elem.print(); }}; main() { vector coll(5); coll.input(); StudentPrint cmp; for_each(coll, cmp); }