• Funksiya shablonini override (qayta yozish) qilish.
  • Funksiya shablonini Override qilish yangi usuli
  • Funksiya shablonining kamchiligi
  • Sinf shablonida ikki xil toifadan foydalanish
  • Maxsuslashtirilgan sinf shabloni
  • Shablonning asosiy xususiyatlari reusable
  • Umumiy funksiyaning boshqacha ko’rinishi




    Download 73 Kb.
    bet2/2
    Sana12.12.2023
    Hajmi73 Kb.
    #117203
    1   2
    Bog'liq
    55-22 Mansurova Ozoda

    Umumiy funksiyaning boshqacha ko’rinishi
    Quyidagi misolda swapargs( ) funksiyasi boshqacharoq ko’rinishda e’lon qilingan. Ya’ni shablon birinchi satrda funksiya esa alohida satrda joylashgan.
    template
    void swapargs(X &a, X &b)
    {
    X temp;
    temp = a;
    a = b;
    b = temp;
    }

    Lekin bu ko’rinishda birinchi va ikkinchi satr o’rniga bironta kod yozilsa xatolik beradi


    template
    int c // ERROR
    void swapargs(X &a, X &b)
    {
    X temp;
    temp = a;
    a = b;
    b = temp;
    }
    Funksiya shablonini override (qayta yozish) qilish.
    template void swapargs(X &a, X &b)
    {
    X temp;
    temp = a;
    a = b;
    b = temp;
    cout << "swapargs funksiya shabloni chaqirildi.\n";
    }
    // Bunda swapargs() funksiyasi faqatgina int tipi uchun ishlaydi.
    void swapargs(int &a, int &b)
    {
    int temp;
    temp = a;
    a = b;
    b = temp;
    cout << " int tipi uchun maxsus swapargs funksiyasi.\n";
    }
    int main()
    {
    int i=10, j=20;
    double x=10.1, y=23.3;
    char a='x', b='z';
    cout << "Original i, j: " << i << ' ' << j << '\n';
    cout << "Original x, y: " << x << ' ' << y << '\n';
    cout << "Original a, b: " << a << ' ' << b << '\n';
    swapargs(i, j); // calls explicitly overloaded swapargs()
    swapargs(x, y); // calls generic swapargs()
    swapargs(a, b); // calls generic swapargs()
    cout << "Swapped i, j: " << i << ' ' << j << '\n';
    cout << "Swapped x, y: " << x << ' ' << y << '\n';
    cout << "Swapped a, b: " << a << ' ' << b << '\n';
    return 0;
    }

    Dastur natijasi:





    Funksiya shablonini Override qilish yangi usuli
    template<> void swapargs(int &a, int &b)
    {
    int temp;
    temp = a;
    a = b;
    b = temp;
    cout << " int tipi uchun maxsus swapargs funksiyasi.\n";
    }


    Funksiya shablonini overload qilish.
    // Oddiy funksiyalardek, funksiya shablonini ham overload qilish mumkin.
    #include
    using namespace std;
    // f() funksiya shablonining birinchi turi.
    template void f(X a)
    {
    cout << "Inside f(X a)\n";
    }
    // f() funksiya shablonining ikkinchi turi.
    template void f(X a, Y b)
    {
    cout << "Inside f(X a, Y b)\n";
    }
    int main()
    {
    f(10); // calls f(X)
    f(10, 20); // calls f(X, Y)
    return 0;
    }
    Funksiya shablonining kamchiligi

    • Umumiy funksiyalar funksiya overloadining o’rnini bosishi mumkin.

    • Lekin bu yerda bitta kamchilik mavjud.

    • Biz oddiy funksiyani overload qilganimizda, har xil ma’lumotlar tipi uchun funksiya tanasini har xil qilib yozishimiz mumkin.

    • Lekin umumiy funksiyada har xil tip qabul qila olgani bilan funksiya tanasi har doim bir xil bo’ladi, chunki bitta funksiyaga murojaat bo’ladi.

    • Faqatgina ma’lumotlar tipi har xil bo’la oladi.

    Umumiy sinflar (sinf shabloni)
    Sinf shablonini e’lon qilishning umumiy formasi:
    template TOIFA> class sinf_nomi{
    ...
    }
    Yoki quyidagi ko’rinishda e’lon qilish mumkin
    template TOIFA>
    class sinf_nomi {
    ...
    }
    Sinf shablonini ishlatish
    sinf_nomi obyekt;


    Sinf shabloni uchun oddiy misol.
    #include
    using namespace std;
    template
    class mypair {
    T a, b;
    public:
    mypair (T first, T second)
    {a=first; b=second;}
    T getmax ();
    };
    template
    T mypair::getmax ()
    {
    T retval;
    retval = a>b? a : b;
    return retval;
    }
    int main () {
    mypair myobject (100, 75);
    cout << myobject.getmax();
    return 0;
    }



    Sinf shablonida ikki xil toifadan foydalanish
    #include
    using namespace std;
    template class myclass
    {
    Type1 i;
    Type2 j;
    public:
    myclass(Type1 a, Type2 b) { i = a; j = b; }
    void show() { cout << i << ' ' << j << '\n'; }
    };
    int main()
    {
    myclass ob1(10, 0.23);
    myclass ob2('X', "Templates add power.");
    ob1.show(); // show int, double
    ob2.show(); // show char, char *
    return 0;
    }

    Dastur natijasi:



    Maxsuslashtirilgan sinf shabloni
    template<> konstruktori maxsusashtirilgan sinf shabloni uchun ishlatiladi
    template class myclass {
    T x;
    public:
    myclass(T a) {
    cout << "Inside generic myclass\n";
    x = a;
    }
    T getx() { return x; }
    };
    // int toifasi uchun maxsuslashtirilgan sinf shabloni.
    template <> class myclass {
    int x;
    public:
    myclass(int a) {
    cout << "Inside myclass specialization\n";
    x = a * a;
    }
    int getx() { return x; }
    };


    Shablonning asosiy xususiyatlari

    • reusable kod yozish imkonini beradi.

    • Shablonlar yordamida framework lar yaratish mumkin

    • Dastur kodi egiluvchanlik xususiyatiga ega bo’ladi.

    • Turli xil tipdagi ma’lumotlar ustida ishlash uchun kod yozishda vaqtni tejash

    • C++ dagi STL lar (Standard Shablon Kutubxonalar), nomidan ko’rinib turibdiki, shablonlar yordamida yaratilgan

    Download 73 Kb.
    1   2




    Download 73 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Umumiy funksiyaning boshqacha ko’rinishi

    Download 73 Kb.