Mavzuga kirish; Shablonlar nazariyasi; Misol: Umumiy toifa


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

#include

  • #include

  • #include "GenericStack.h"

  • using namespace std;




    1. int main()

    2. {

    3. // int qiymatlar uchun yangi stek yaratish

    4. Stack<int> intStack;

    5. for (int i = 0; i < 10; i++)

    6. intStack.push(i);




    1. while (!intStack.empty())

    2. cout << intStack.pop() << " ";

    3. cout << endl;




    1. // Satrlar uchun yangi stek yaratish

    2. Stack stringStack;

    3. stringStack.push("Chicago");

    4. stringStack.push("Denver");

    5. stringStack.push("London");




    1. while(!stringStack.empty())

    2. cout << stringStack.pop() << " ";

    3. cout << endl;




    1. return 0;

    2. }

    Natija:

    9 8 7 6 5 4 3 2 1 0
    London Denver Chicago

    Shablon sinfda ob’yekt yaratishda T - tur parametri uchun aniq bir turni belgilab olishimiz zarur. Masalan:


    Stack intStack;
    Bu e’lon qilinish T - tur parametrini int bilan almashtiradi. Shu sababli ham intStack steki int qiymatlar steki hisoblanadi. intStack ob’yekti ham xuddi ixtiyoriy boshqa ob’yektlarga o`xshaydi. Dastur intStack stekka int qiymatlarni qo`shish uchun push funksiyasini chaqiradi (11-qator) va stekdan elementlarni chop etadi (13-14-qatorlar).
    Dastur 18-qatorda satrlarni yozish uchun stek ob’yektni e’lon qiladi, stekda uchta satrni yozadi (19-21-qatorlar) va stekdagi satrlarni chop etadi (24-qator).
    Quyidagi kodli qismlarga e’tibor beraylik:
    9-11-qatorlar.
    while (!intStack.empty())
    cout << intStack.pop() << " ";
    cout << endl;
    23-25-qatorlar
    while (!stringStack.empty())
    cout << stringStack.pop() << " ";
    cout << endl;
    Bu kodli qismlar deyarli bir xil. Ular o`rtasidagi farq intStack va stringStack yozuvlaridagi shakllantirish operatsiyalarida. Stekdagi elementlarni chop etish uchun stek parametrli funksiya aniqlashimiz mumkin. Yangi dastur 1.6-kodli ro`yxatda keltirilgan.
    1.6-kodli ro`yxat. TestGenericStackWithTemplateFunction.cpp

    1. #include

    2. #include

    3. #include "GenericStack.h"

    4. using namespace std;


    5. template <typename T>

    6. void printStack(Stack& stack)

    7. {

    8. while(!stack.empty())

    9. cout << stack.pop() << " ";

    10. cout << endl;

    11. }


    12. int main()

    13. {

    14. // int qiymatlar uchun yangi stek yaratish

    15. Stack<int> intStack;

    16. for (int i = 0; i < 10; i++)

    17. intStack.push(i);

    18. printStack(intStack);


    19. // Satrlar uchun yangi stek yaratish

    20. Stack<string> stringStack;

    21. stringStack.push("Chicago");

    22. stringStack.push("Denver");

    23. stringStack.push("London");

    24. printStack(stringStack);


    25. return 0;

    26. }

    Shablon funksiyada umumiy sinf nomi Stack tur parametr sifatida qo`llanilgan (7-qator).
    Eslatma. C++ sinf shablonida tur parametr uchun jimlik qoidasiga ko`ra tur ni ta’minlashga ruxsat beradi. Masalan, jimlik qoidasiga ko`ra tur sifatida, umumiy Stack sinfida quyidagicha ta’minlash mumkin:
    template<typename T = int>
    class Stack
    {
    ...
    };
    Endi sinf shablonida jimlik qoidasi turidan foydalanishimiz mumkin, lekin funksiya shablonida emas.
    Eslatma.Biz shuningdek, template qo`shimchasi tarkibida tur parametri bilan tursiz parametr ni ham qo`llashimiz mumkin. Masalan, Stack sinfda parametr sifatida, massiv o`lchamini quyidagicha e’lon qilish mumkin:
    template<typename T, int capacity>
    class Stack
    {
    ...
    private:
    T elements[capacity];
    int size;
    };
    Shunday qilib, biz stek hosil qilganimizda, massiv o`lchamini belgilashimiz mumkin. Masalan,
    Stack500> stack;
    500 tagacha satrlarni saqlay oluvchi stekni e’lon qiladi.
    Eslatma. Sinf shablonida statik a’zolarni aniqlash mumkin. Har bir shablon belgilanishi o`zining statik ma’lumotlar maydonidagi nusxasiga ega.


    Nazorat savollari



    1. Shablon nima va uning qanday turlari mavjud?

    2. Funksiya shabloni qanday yaratiladi?

    3. Funksiya shablonida turli xil tiplardan foydalanish mumkinmi? Agar mumkin bo'lsa bunday turdagi funksiya shablonlari qanday ko'rinishda yaratiladi?

    4. Funksiya shablonini override qilish formasi qanday? Misol keltiring?

    5. Funksiya shablonini override qilishning yangi formasi qanday ko'rinishda?

    6. Funksiya shabloni qanday overload qilinadi?

    7. Sinf shabloni qanday yaratiladi?

    8. Sinf shablonida ikki va undan ortiq toifalardan foydalanish qanday amalga oshiriladi. Misol keltiring?

    9. Shablonning kamchiliklari?

    10. Shablonning avzalliklari?

    11. Funksiya shablonida parametrlar qanday turda bo’ladi?

    12. Sinf shablonida parametrlar bo’ladimi? Bo’lsa qaaday?

    13. Funksiya shablonining parametrini turlari har-hil bo’lishi mumkinmi?

    14. Funksiya shabloni orqali to’plamlarni qanday qayta ishlash mumkin?

    15. Sinf shabloni orqali to’plamalar qiymatlari qanday qayta ishlanadi?

    16. Funksiya shablonlaridan friend funksiya sifata foydalanilsa bo’ladimi?

    17. Funksiya shabloni ko’rsatgich bo’la oladimi?

    18. Sinf shablonida funksiya shablonini yartish mumkinmi?

    19. Sinf shablonida konstruktorni asossiy vasifasi nimadan iborat?

    20. Funksiya shabloni obyekt qaytarish mumkinmi? Mumkin bo’lsa qanday?

    21. Funksiya parametrida funksiya shablonini ishlatish mumkinmi?

    22. Funksiya parametrida class shablonini ishlatish mumkinmi?

    23. Funksiya parametrida funksiya shabloni birinchi keladimi yoki class shablonimi?

    24. Funksiya parametrida funksiya shabloni birinchi keladimi yoki class shablonimi?

    25. Funksiya shabloni foydalanuvchi yaratgan class uchun ham ishlaydimi?

    26. Funksiya shablonini massiv sifatida ishlatish mumkinmi?

    27. Funksiya shabloni konstruktor bo’lishi mumkinmi?

    28. Funksiya shabloni obyektlar qabul qilishi mumkinmi?

    29. Funksiya shabloni qaysi turda bo’lishi mumkinmi?

    30. Funksiya shabloni rekursiv bo’lishi mumkinmi?

    31. Shablon class dan voris olish mumkinmi?

    32. Shablon class dan obyek olish mumkinmi?

    33. Shablon classda virtual funksiya yaratish mumkinmi?

    34. Shablon class obyek qabul qiladimi?

    35. Shablon class ni massiv sifatida ishlatish mumkinmi?

    36. Shablon class da modifikatorlar ishlaydimi?

    37. Shablon class ning zamonaviy nomi nima?

    38. Shablon class da shablon fuksiyalar ishlaydimi?

    39. Shablon class da shablon class yaratish mumkinmi?

    40. Shablon classni qayta yuklash mumkinmi?

    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