• 1.9-dastur.
  • Tiplarni dinamik tarzda




    Download 1,83 Mb.
    bet9/131
    Sana13.05.2024
    Hajmi1,83 Mb.
    #228405
    1   ...   5   6   7   8   9   10   11   12   ...   131
    Bog'liq
    Tiplarni dinamik tarzda

    1.8-dastur. Typeid operatori o‘rniga dynamic_cast operatoridan foydalanish.


    #include "stdafx.h" #include #include using namespace std; class Base {
    public:
    virtual void f() {}
    };

    class MyClass : public Base { public:


    void derivedOnly() {
    cout << "Bu MyClass obʻyekti.\n";
    }
    };
    int main(){
    Base *bp, b_ob; MyClass *dp, d_ob;
    // typeid operatoridan foydalanish
    bp = &b_ob;

    if(typeid(*bp) == typeid(MyClass)) { dp = (MyClass *) bp;
    dp->derivedOnly();
    } else
    cout <<" Base tipidagi obʻyekt MyClass almashtirilmadi. \n"; bp = &d_ob;
    if(typeid(*bp) == typeid(MyClass)) { dp = (MyClass *) bp;
    dp->derivedOnly();
    } else
    cout <<"Xatolik, tip almashtirish yozilmagan! \n";
    // dynamic_cast operatoridan foydalanish bp = &b_ob;
    dp = dynamic_cast (bp); if(dp) dp->derivedOnly();
    else cout << " Base tipidagi obʻyekt MyClass almashtirilmadi. \n"; bp = &d_ob;
    dp = dynamic_cast (bp); if(dp) dp->derivedOnly();
    else cout << "Xatolik, tip almashtirish yozilmagan! \n"; system("pause");
    return 0;
    }




    1.8 – dastur natijasi. Output

    Base tipidagi obʻyekt MyClass almashtirilmadi. Bu MyClass obʻyekti.
    Base tipidagi obʻyekt MyClass almashtirilmadi.
    Bu MyClass obʻyekti.

    1.8-dasturdan ko‘rinadiki, asos sinfning ko‘rasatkichini MyClass ko‘rsatkichiga almashtirishda dynamic_cast operatorini qo‘llash dastur mantig‘ini qulayroq qiladi. Yuqoridagi dastur natijasiga qarang. Shuningdek, dynamic_cast operatorini shablon sinflarga ham qo‘llash mumkin.
    const_cast operatori. Const_cast operatori const va/yoki volatile o‘zgartirgichlarni qayta aniqlash uchun xizmat qiladi.
    Const_cast operatori const va / yoki volatile o‘zgartirgichlarni ochiq qayta aniqlash/joriy qilish uchun ishlatiladi. const yoki volatile ning atrubutlariga istesno tariqasida, yangi tipi joriy tipi bilan mos bo‘lishi kerak. Ko‘pincha const_cast

    operatori const atributini olib tashlash uchun ishlatiladi. Uning umumiy formati quyidagicha:




    const_cast (expr)

    Bu yerda type elementi yangi tipga almatirish tipini o‘rnatadi, expr elementi esa yangi tipga tipi almatirilishi kerak bo‘lgan o‘zgaruvchi(ifoda)ni bildiradi.
    1.9-dastur. Const_cast operatoridan foydalanish.


    #include "stdafx.h"

    #include #include


    using namespace std;

    void f (const int *p){ int *v;
    v = const_cast (p); // const-oʻzgaruvchini qayta almashtirish.
    *v = 1980; // yangi qiymat berish, modifikatsiyalash
    }

    int main(){


    int x = 2004;
    cout <<" f() funksiya chaqirilmasdan oldin x ni qiymati: " << x<< endl; f (&x);
    cout <<" f() funksiya chaqirilgandan soʻng x ni qiymati: " << x<< endl; system("pause");
    return 0;
    }



    1.9 – dastur natijasi. Output

    f() funksiya chaqirilmasdan oldin x ni qiymati: 2004
    f() funksiya chaqirilgandan soʻng x ni qiymati: 1980

    Ko‘rib turganingizdek, x o‘zgaruvchi qabul qilgan parametr const ko‘rsatgichi sifatida o‘rnatildi va f() funksiyasi tomonidan o‘zgartirilgan.


    Const atributini o‘chirish uchun const_cast operatoridan foydalanish xavfli darajadagi vosita ekanligini alohida taʻkidlash lozim. Shuning uchun, juda diqqat bilan foydalanishni tavsiya qilamiz.
    Faqat const_cast operatori const atributini o‘chirishi mumkinligini bilib oldingiz. Boshqa so‘zlar bilan aytganda, na dynamic_cast, static_cast, yoki reinterpret_cast obʻyekt const atributini o‘zgartirish uchun foydalanish mumkin emas.

    Download 1,83 Mb.
    1   ...   5   6   7   8   9   10   11   12   ...   131




    Download 1,83 Mb.