Mavzuga kirish; Shablonlar nazariyasi; Misol: Umumiy toifa


GenericType maxValue(GenericType


Download 61.98 Kb.
bet3/9
Sana21.01.2023
Hajmi61.98 Kb.
#1107357
1   2   3   4   5   6   7   8   9
Bog'liq
2) 15- ma\'ruza matni

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

    1. #include

    2. #include

    3. using namespace std;



    template <typename T>
    T maxValue(T value1, T value2)
    {
    if (value1 > value2)
    return value1;
    else
    return value2;
    }


    int main()
    {
    cout << "1 va 3 ning kattasi: " << maxValue(1, 3) << endl;
    cout << "1.5 va 0.3 ning kattasi: " "
    << maxValue (1.5, 0.3) << endl;
    cout << "‘A’ va ‘N’ ning kattasi: "
    << maxValue ('A', 'N') << endl;
    cout << " \"NBC\" va \"ABC\" ning kattasi: "
    << maxValue (string("NBC"), string("ABC")) << endl;


    return 0;
    }
    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.
    Ogohlantirish. Umumiy maxValue funksiyasi ixtiyoriy turdagi ikkita qiymatning kattasini topish uchun mo`ljallangan bo`lib, quyidagicha shartlar asosida ishlaydi:
    ■ The two values have the same type;
    ■ The two values can be compared using the >operator.
    Masalan, agar siz bir qiymatni int turida, ikkinchisini esa, double turida bersangiz, kompilyatsion xatolik yuz beradi. Chunki kompilyator funksiyani chaqirishda mos turni aniqlay olmaydi. Agar siz funksiyani maxValue(Circle(1), Circle(2)) ko`rinishda chaqirsangiz, kompilyatsion xatolik yuz beradi. Chunki Circle sinfida > operatori aniqlanmagan.

    Download 61.98 Kb.

    Do'stlaringiz bilan baham:
  • 1   2   3   4   5   6   7   8   9




    Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
    ma'muriyatiga murojaat qiling