Tiplarni dinamik tarzda



Yüklə 8,26 Mb.
səhifə9/131
tarix30.12.2023
ölçüsü8,26 Mb.
#164059
1   ...   5   6   7   8   9   10   11   12   ...   131
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.

Yüklə 8,26 Mb.

Dostları ilə paylaş:
1   ...   5   6   7   8   9   10   11   12   ...   131




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə