Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"



Download 333,2 Kb.
bet85/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   82   83   84   85   86   87   88   89   90
Bog'liq
C majmua

Murojaatlarni almashtirish

Argument – murojaat uchun almashtirish amali ma’nosi ko’rsatgichga qaraganda biroz boshqacharoq. Murojaat hammavaqt konkret obyektni ko’rsatgani uchun dynamic_cast amali bu obyekt tipiga almashtirishni bajarishi lozim. Keltirishning to’g’riligi avtomatik tekshiriladi, ustma-ust tushmagan holda bad_cast favqulotda holat hosil qilinadi:


#include
#include
class B{
public: virtual void f l ( ) { };
};
class C: public B{
public: void f2(){ ... };
};
void demo(B& p){
try{
C& с = dynamic_cast(p);
c.f2();
}
catch(bad_cast){

}
}
int main(){
B* b = new B; demo(*b); // Favqulotda holat hosil qilinadi
С* с = new С; demo(*c); // To’g’ri
return 0;
}


Kesishmali almashtirish

dynamic_cast amali biz bazaviy sinf hosila sinflar yordamida tipni xavfsiz almashtirishni bajarishga imkon beradi, masalan:


#include
#include
class B{
public: virtual void fl ( ) { };
};
class C: public B{
public: void f2(){ ... };
};
class D: public B{ ... }:
void demo(D* p){
C* с = dynamic_cast(p);
if(c)c->f2();
else cout << " bajarilmagan ":
}
int main(){
B* b = new C; demo((D*)b);
return 0;
}
C va D sinflar B sinfning hosila sinflari hisoblanadi. demo funksiyalari unga “qardosh” bo’lgan C sinfga ko’rsatgich bo’lgan D sinfga ko’rsatgich uzatiladi, shuning uchun demo funksiyaga tipni D dan C ga dinamik almashtirish muvaffaqiyatli yakunlanadi.
Zarurat bo’lganda bir hosila sinflar bazaviy sinflari orasida almashtirish bajarish mumkin, masalan:
#include
#include
class B{
public: virtual void fl ( ) { . . . }; // В С
}; // \ /
class C{ // D
public: virtual void f2(){ ... };
};
class D: public B, public C{};
void demo(B* b){
С* с = dynamic_cast(b);
if(c)c->f2();
}
int ma1n(){
D* d = new D; demo(d);
return 0;
}
D sinf B va C ning avlodi, shuning uchun ikkala sinf usullarini o’z ichiga oladi. Agar demo funksiyaga haqiqatda Bga emas, Dga ko’rsatgich uzatilsa, uni Cning ikkinchi bazaviy sinfiga almashtirish mumkin.



Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   82   83   84   85   86   87   88   89   90




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish