int maxValue(int value1, int value2)
{
if (value1 > value2)
return value1;
else
return value2;
}
double maxValue(double value1, double value2)
{
10. if (value1 > value2)
11. return value1;
12. else
13. return value2;
14. }
15. char maxValue(char value1, char value2)
16. {
17. if (value1 > value2)
18. return value1;
19. else
20. return value2;
21. }
22. string maxValue(string value1, string value2)
23. {
24. if (value1 > value2)
25. return value1;
26. else
27. return value2;
28. }
Bu funksiyalarning to`rtalasi ham ulardagi qo`llanilgan turlarning har xil ekanliklari inobatga olinmasa, deyarli bir xil. Birinchi funksiya int turini, ikkinchi funksiya double turini, uchinchi funksiya char turini va to`rtinchi funksiya string turini qo`llaydi. Agar biz quyidagicha ko`rinishda, umumiy tur bilan, bittagina, oddiy funksiyani aniqlasak, bir funksiyaning o`zida barcha turlarning saqlanib qolishi, ortiqcha bo`sh joyning paydo bo`lishi va dasturning osonlik bilan qayta sozlanishiga erishishimiz mumkin:
GenericType maxValue(GenericType value1, GenericType value2)
{
if (value1 > value2)
return value1;
else
return value2;
}
Mazkur GenericType (UmumiyTur) int, double, char, string kabi turlarning barchasini qo`llay oladi. C++ funksiya shablonlarini umumiy tur bilan aniqlash imkonini beradi. 6.1-kodli ro`yxat umumiy turdagi ikkita qiymatning kattasini topish uchun funksiya shablonini aniqlaydi.
1.1-kodli ro'yxat. GenericMaxValue.cpp
#include
#include
using namespace std;
template <typename T>
T maxValue(T value1, T value2)
{
if (value1 > value2)
return value1;
else
10. return value2;
11. }
12. int main()
13. {
14. cout << "1 va 3 ning kattasi: " << maxValue(1, 3) << endl;
15. cout << "1.5 va 0.3 ning kattasi: " "
16. << maxValue (1.5, 0.3) << endl;
17. cout << "‘A’ va ‘N’ ning kattasi: "
18. << maxValue ('A', 'N') << endl;
19. cout << " \"NBC\" va \"ABC\" ning kattasi: "
20. << maxValue (string("NBC"), string("ABC")) << endl;
21. return 0;
22. }
Natija:
1 va 3 ning kattasi: 3
1.5 va 0.3 ning kattasi: 1.5
‘A’ va ‘N’ ning kattasi: N
"NBC" va "ABC" ning kattasi: NBC
|
Funksiya shablonining aniqlanishi parametrlar ro`yxati tomonidan berilgan template – kalit so`zi bilan boshlanadi. Har bir parametr dastlab o`zaro teng kuchli bo`lgan typename yoki class kalit so`zi orqali, yoki ko`rinishida beriladi. Masalan, 5-satrdagi
template<typename T>
maxValue uchun funksiya shablonining aniqlanishini boshlaydi. Shuningdek, bu satr prefiks shablon deb ham yuritiladi. Bu yerda T – parametr turi. Katta T harfining faqat parametr turini ifodalashda ishlatilishi kelishilgan.
maxValue funksiyasi 6-12qatorlarda aniqlangan. Undan funksiya qaytaruvchi qiymat turi, funksiya parametrlari yoki funksiyada e’lon qilingan o`zgaruvchilarning turlarini aniqlashda foydalanish mumkin. Kodning 16-22-qatorlarida int, double, char va string turlari bo`yicha katta qiymatlilarni qaytarish uchun maxValue funksiyasi chaqirilgan. Funksiya maxValue(1, 3) ko`rinishda chaqirilganda, kompilyator argument turi int ekanligini aniqlaydi va funksiyani aniq int turida chaqirish uchun, T – parametr turini int ga o`zgartiradi. Funksiya maxValue(string("NBC"), string("ABC")) ko`rinishda chaqirilganda, kompilyator argument turi string ekanligini aniqlaydi va funksiyani aniq string turida chaqirish uchun, T – parametr turini string ga o`zgartiradi.
Agar 22-qatorda berilgan maxValue(string("NBC"), string("ABC")) ni maxValue("NBC", "ABC") deb o`zgartirsak nima bo`ladi? Unda biz funksiya ABC ni qaytarishini ko`rish uchun “syurpriz” tayyorlagan bo`lamiz. Nima uchun? Chunki “NBC” va “ABC” lar – C-satrlardir. maxValue("NBC", "ABC") ning chaqirilishi “NBC” va “ABC” larning manzillarini funksiya parametriga uzatadi. value1 > value2 taqqoslash vaqtida ikkita massivning manzillari taqqoslanadi, tarkiblari emas.
Do'stlaringiz bilan baham: |