• Nazorat savollari: Klass nima Dasturlashda ob’yekt va klass o’rtasifagi farqni izohlang
  • KONSTRUKTORLAR. KONSTRUKTORLAR BU SINF KOMPONENTA FUNKSIYALARI BO‘LIB, OB’EKTLARNI AVTOMATIK INITSIALIZATSIYA QILISH UCHUN ISHLATILADI




    Download 34.74 Kb.
    bet4/4
    Sana08.09.2023
    Hajmi34.74 Kb.
    #80846
    1   2   3   4
    Bog'liq
    Ma\'ruza 6.1. Dek
    Ma\'ruza 6.0. Navbat, KCTT(FD)

    KONSTRUKTORLAR. KONSTRUKTORLAR BU SINF KOMPONENTA FUNKSIYALARI BO‘LIB, OB’EKTLARNI AVTOMATIK INITSIALIZATSIYA QILISH UCHUN ISHLATILADI.


    Konstruktorlar ko‘rinishi quyidagicha bo‘lishi mumkin:
    Sinf nomi (formal parametrlar ro‘yxati)
    {konstruktor tanasi}
    Bu komponenta funksiya nomi sinf nomi bilan bir xil bo‘lishi lozim.
    Misol uchun complex sinfi uchun konstruktorni quyidagicha kiritish mumkin :
    complex (double re = 0.0; double im = 0.0 )
    {real=re; imag=im;}
    Konstruktorlar uchun qaytariluvchi tiplar, xatto void tipi ham ko‘rsatilmaydi. Dasturchi tomonidan ko‘rsatilmagan holda ham ob’ekt yaratilganda konstruktor avtomatik ravishda chaqiriladi.
    Masalan ob’ekt complex cc; shaklida aniqlangan bo‘lsa, konstruktor avtomatik chaqirilib
    real va imag parametrlari avtomatik ravishda 0.0 qiymatlariga ega bo‘ladi.
    Ko‘zda tutilgan holda parametrsiz konstruktor va quyidagi tipdagi nusxa olish konstruktorlari yaratiladi: T :: T (const T&)
    Misol uchun
    class F
    {...
    public : F(const T&)
    ...
    }
    Sinfda bir nechta konstruktorlar bo‘lishi mumkin, lekin ularning faqat bittasida parametrlar qiymatlari oldindan ko‘rsatilgan bo‘lishi kerak.
    Konstruktor adresini hisoblash mumkin emas. Konstruktor parametri sifatida o‘z sinfining nomini ishlatish mumkin emas, lekin bu nomga ko‘rsatkichdan foydalanish mumkin.
    Konstruktorni oddiy komponenta funksiya sifatida chakirib bo‘lmaydi. Konstruktorni ikki xil shaklda chaqirish mumkin :
    Sinf_nomi .Ob’ekt_nomi (konstruktor_xaqiqiy_parametlari)
    Sinf_nomi (konstruktor_xaqiqiy_parametlari)
    Birinchi shakl ishlatilganda xaqiqiy parametrlar ro‘yxati bo‘sh bo‘lmasligi lozim. Bu shakldan yangi ob’ekt ta’riflanganda foydalaniladi:
    complex SS(10.3; 0.22)
    // real=10.3; SS.imag= 0.22;
    complex EE (2.3)
    // EE . real= 2.3;
    EE.imag= 0.0;
    complex D() // xato
    Konstruktorni ikkinchi shaklda chaqirish nomsiz ob’ekt yaratilishiga olib keladi. Bu nomsiz ob’ektdan ifodalarda foydalanish mumkin.
    Misol uchun :
    complex ZZ= complex (4.0;5.0);
    Bu ta’rif orkali ZZ ob’ekt yaratilib, unga nomsiz ob’ekt qiymatlari(real= 4.0; imag= 5.0) beriladi;
    Konstruktor nomi sinf nomi bilan bir xil bo‘lishi lozimdir. Misol uchun siz employee sinfdan foydalansangiz, konstruktor ham employee nomga ega bo‘ladi. Agar dasturda konstruktor ta’rifi berilgan bo‘lsa ob’ekt yaratilganda avtomatik chaqiriladi. Quyidagi dasturda employee nomli sinf kiritilgandir:
    class employee
    {
    public:
    employee(long, float);
    void show_employee(void);
    private:
    long employee_id;
    float salary;
    };
    Konstruktor ta’rifi:
    employee::employee(long empl_id, float sal)
    {
    employee_id = empl_id;
    if (salary < 50000.0)
    salary = sal;
    else
    salary = 0.0;
    }
    Shu sinfdan foydalanilgan dastur:
    #include
    using namespace std;
    class employee
    {
    public:
    employee(long, float);
    void show_employee(void);
    private:
    long employee_id;
    float salary;
    };
    employee::employee(long empl_id, float sal)
    {
    employee_id = empl_id;
    if (salary < 50000.0)
    salary = sal;
    else
    salary = 0.0;
    }
    void employee::show_employee(void)
    {
    cout << "Nomer: " << employee_id << endl;
    cout << "Maosh: " << salary << endl;
    }
    int main()
    {
    employee worker(101, 10101.0);
    cout<<"ishchi"<worker.show_employee();
    return 0;
    }
    Konstruktordan foydalanib ob’ekt ta’rifilanganda parametr uzatish mumkin: employee worker(101, 10101.0);
    Agar dasturda employee tipidagi ob’ektlar mavjud bo‘lsa har birini quyidagicha initsializatsiya qilish mumkin
    employee worker(101, 10101.0);
    employee secretary(57, 20000.0);
    employee manager(1022, 30000.0);

    KONSTRUKTORLAR VA KO‘ZDA TUTILGAN QIYMATLAR. KONSTRUKTORLARDA KO‘ZDA TUTILGAN QIYMATLARDAN HAM FOYDALANISH MUMKINDIR. MISOL UCHUN QUYIDAGI KONSTRUKTOR EMPLOYEE MAOSHI QIYMATINI DASTURDA KO‘RSATILMAGAN BO‘LSA 10000.0 TENG QILIB OLADI:


    employee::employee(long empl_id, float sal = 100.00)
    {
    employee_id = empl_id;
    if (salary < 50000.0)
    salary = sal;
    else
    salary = 0.0;
    }

    KONSTRUKTORLARNI QO‘SHIMCHA YUKLASH. C++ TILIDA KONSTRUKTORLARNI HAM QO‘SHIMCHA YUKLASH MUMKINDIR. QUYIDAGI DASTURDA KONSTRUKTOR EMPLOYEE QO‘SHIMCHA YUKLANGANDIR. BIRINCHI KONSTRUKTOR, DASTUR XIZMATCHI, NOMER VA OYLIGI KO‘RSATILISHINI TALAB QILADI. IKKINCHI KONSTRUKTOR OYLIKNI KIRITILISHINI SO‘RAYDI. SINF TA’RIFI ICHIDA IKKALA KONSTRUKTOR PROTOTIPI KO‘RSATILISHI LOZIM:


    #include
    using namespace std;
    class employee
    {
    public:
    employee(long, float);
    employee(long);
    void show_employee(void);
    private:
    long employee_id;
    float salary;
    };
    employee::employee(long employee_id, float salary)
    {
    employee::employee_id = employee_id;
    if (salary < 50000.0) employee::salary = salary;
    else
    employee::salary = 0.0;
    }
    employee::employee(long employee_id)
    {
    employee::employee_id = employee_id;
    do
    {
    cout << "Maosh kiriting $50000 dan kichik: ";
    cin >> employee::salary;
    }
    while (salary >= 50000.0);
    }
    void employee::show_employee(void)
    {
    cout << "Nomer: " << employee_id << endl;
    cout << "Maosh: " << salary << endl;
    }
    int main()
    {
    cout<<"ishchi"<employee worker(101, 10101.0);
    worker.show_employee();
    cout<<"manager"<employee manager(102);
    manager.show_employee();
    return 0;
    }
    Ob’ektlar massivlari. Ob’ektlar massivi ta’riflash uchun sinf ko‘zda tutilgan (parametrsiz) konstruktorga ega bo‘lishi kerak.
    Ob’ektlar massivi ko‘zda tutilgan konstruktor tomonidan, yoki har bir element uchun konstruktor chaqirish yo‘li bilan initsializatsiya qilinishi mumkin.
    class complex a[20]; //ko‘zda tutilgan parametrsiz konstruktorni chaqirish
    class complex b[2]={complex(10),complex (100)};
    //oshkor chaqirish
    Quyidagi misolda player, sinfi kiritiladi. Dasturda sinf funksiyasi show_player va konstruktor tashqarisida ta’riflanadi. So‘ngra player tipidagi ikki massiv yaratilib, har biri xakidagi ma’lumot ekranga chikariladi
    #include
    #include
    using namespace std;
    class player
    {
    public:
    player();
    player (string name,int weight, int age);
    void show_player (void);
    private:
    string name;
    int weight;
    int age;
    };
    player::player()
    {
    name="";
    weight = 0;
    age = 0;
    };
    player::player(string name,int weight, int age)
    {
    player::name=name;
    player::weight = weight;
    player::age = age;
    };
    void player::show_player (void)
    {
    cout<<"Ism: " << name << endl;
    cout<<"Vazn: " << weight << endl;
    cout<<"Yosh: " << age << endl;
    }
    class array_player
    { public:
    void show_array(player a[],int n)
    { for(int i=0;i{a[i].show_player();cout<void input_array(player a[],int n)
    {string name;int weight,age;
    for(int i=0;i{cin>>name>>weight>>age;
    a[i]=player(name,weight,age);
    }
    }
    };
    int main()
    {array_player arr;
    Player happy[]={player("Olimov",58,24),
    player("Alimov",72,35)};
    arr.show_array(happy,2);
    player matt[2];
    arr.input_array(matt,2);
    arr.show_array(matt,2);
    return 0;
    }
    Initsializatorlar ro‘yxati. Konstruktor yordamida ob’ekt ma’lumotlarni initsiyalizatsiyalashni ikkita usuli mavjud.
    Birinchi usulda parametrlar qiymatlari konstruktor tanasiga uzatiladi. Ikinchi usulda esa ushbu sinfdagi initsializatorlar ro‘yxatidan foydalanish nazarda tutilgan. Bu ro‘yxat parametrlar ro‘yxati va konstruktor tanasi orasiga joylashadi. Ro‘yxatdagi har bir initsializator konkret aniq komponentaga bog‘liq va quyidagi ko‘rinishga ega:
    ()
    Destruktorlar. Sinfning biror ob’ekti uchun ajratilgan xotira ob’ekt yukotilgandan so‘ng bo‘shatilishi lozimdir.
    Sinflarning maxsus komponentalari destruktorlar, bu vazifani avtomatik bajarish imkonini yaratadi.
    Destruktorni standart shakli quyidagicha :
    ~ sinf_nomi ( ) {destruktor tanasi}
    Destruktor parametri yoki qaytariluvchi qiymatga ega bo‘lishi mumkin emas (xatto void tipidagi).
    Agar sinfda oshkor destruktor mavjud bo‘lmasa, ko‘zda tutilgan destruktor chaqiriladi.
    Dastur ob’ektni o‘chirganda destruktor avtomatik chaqiriladi.


    Nazorat savollari:

    1. Klass nima?

    2. Dasturlashda ob’yekt va klass o’rtasifagi farqni izohlang

    3. Ma’lumotlar strukturasida klass larning imkoniyatlari


    Download 34.74 Kb.
    1   2   3   4




    Download 34.74 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    KONSTRUKTORLAR. KONSTRUKTORLAR BU SINF KOMPONENTA FUNKSIYALARI BO‘LIB, OB’EKTLARNI AVTOMATIK INITSIALIZATSIYA QILISH UCHUN ISHLATILADI

    Download 34.74 Kb.