<
return 0;
}
Программа ишлаши натижасида экранга қуйидагилар чоп этилади:
n=10 Qvadrat n=100
d=10 Qvadrat d=104.244
satr=Qilop O'zgargan satr=Qilop
Son va uning qvadrati:
10 10.21
100 104.244
Arr[5] element adresi = 0x12ff50
Худди оддий функциялардек функциялар қолипининг прототипини эълон қилиш мумкин. Масалан:
template
T Kvadrat(T x);
Функция қолипи ва унинг прототипидаги параметрлар номи устма – уст тушмаслиги мумкин:
// Функция қолипи прототипи
template
void Fun(T,S);
...
// Функция қолипи аниқланиши
template
void Fun(U,V)
{
// Функция танаси
}
Функция қолипининг прототипидаги ҳар бир параметр қолип аниқланишида ишлатилиши керак. Масалан, қуйидаги ҳолат хатоликка олиб келади:
template
T Fun(S);
Функция қолипининг параметрларининг номлари бир хил бўлмаслиги керак. Қуйидаги эълон хато ҳисобланади:
template
T Fun(T,T);
Қолипли функция ташқи, статик ва жойлашувчи деб эълон қилиниши мумкин. Бунинг учун мос калит сўзлар template қаторининг охирида ёзилиши керак бўлади:
// Ташқи қолипли функция прототипи
template extern
void Fun2(T,S);
// Статик қолипли функция прототипи
template static
T Fun2(T);
// Жойлашувчи қолипли функция прототипи
template static
T* Fun3(T,S);
Қолипли функциянинг ҳар бир тур билан биринчи чақирилишида унинг вакили яратилади ва бу жараёнга қолипли функцияни конкретлаш дейилади. Юқорида келтирилган программадаги
kv_n=Kvadrat(n);
kv_d=Kvadrat(d);
чақиришлар бутун тур учун Kvadrat() функциясини, иккинчи кўрсатмани бажариш учун эса бу функциясининг ҳақиқий тур учун вакилини яратади.
Функция қолипини конкретлаштиришда унинг параметрлари учун бошқа турдан ошкор равишда кутилган турга келтириш амалини бажариш мумкин.
Масалан:
template
void Fun1(T){…};
…
void Fun2(char ch)
{
Fun1(ch);
}
Ушбу мисолда компилятор char туридаги ch ўзгарувчисини int турига ўтказади.
Do'stlaringiz bilan baham: |