Tiplarni almashtirish opеratorlari




Download 383,42 Kb.
Pdf ko'rish
bet3/7
Sana20.05.2024
Hajmi383,42 Kb.
#246690
1   2   3   4   5   6   7
Bog'liq
Muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari u

1.2. Tiplarni almashtirish opеratorlari. 
Tiplarni almashtirish operatorlari.
C++tilida beshta tipni almatirish operatorlari mavjud. Ulardan birinchisi bu odatdagi 
(anʻanaviy) uslubda ishlatiladigan[()](cast operatori) azaldan C++gaqurilgan. U 
quyidagicha ishlatiladi: 
float f = (float)5;bool b = (bool)5; 
Dynamic_cast operatori. Dynamic_cast 
operatori dastur bajarilishi davomida polimorf turdagi quyish amalini bajaradi 
. Yangi operatorlardan eng muhimi dynamic_cast tipidagi tip almashtirish 
(kasting, casting) operatoridir. 
Dasturni bajarish davomida taklif qilinayotgan amalning bajarilishini tekshiradi. Agar 
belgilangan amal chaqirilganda yaroqsiz bo‘lsa, 
hech qanday turdagi kasting amalga oshirilmaydi. Dynamic_cast 
operatorini qo‘llashning umumiy formati quyidagicha: 
dynamic_cast 
(expr) 
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) 
static_cast
operatori.
Static_cast 
Operatori polimorf bo‘lmagan tipdagi ko‘rsatkichlarni almashtirish uchun 
foydalaniladi. Har qanday tipni almashtirish uchun foydalanish mumkin. Biroq, 
dastur bajarilgan vaqtda hech qanday tekshirish amalga oshirilmaydi. 
Static_cast operatori quyidagi umumiy yozuv formatiga ega: 
static_cast (expr) 
dynamic_cast operatoridan foydalanish. 


#include "stdafx.h" 
#include  
#include  
using namespace std; 
class Base { 
public: 
virtual void f() { cout << " Base sinfi 
orqali.\n"; } 
// . . . 
}; 
class myClass : public Base { 
public: 
void f() { cout << "myClass sinfi 
orqali.\n"; } 
}; 
int main(){ 
Base *bp, b_ob; 
myClass *dp, d_ob; 
dp = dynamic_cast (&d_ob); 
if(dp) { 
cout << " tipni almashtirish" <<" (myClass* 
=> myClass *) bajarildi. "; 
dp->f(); 
} else cout <<"Xatolik\n"; 
cout << endl; 
bp = dynamic_cast (&d_ob); 
if(bp) { 
cout << " tipni almashtirish " <<"(myClass* 
=> Base *) bajarildi. "; 
bp->f(); 
} else cout << "Xatolik\n"; 
cout << endl; 
bp = dynamic_cast (&b_ob); 
if(bp) { 
cout << " tipni almashtirish " <<"(Base* => 
Base *) bajarildi. "; 
bp->f(); 
} else cout << "Xatolik\n"; 
cout << endl; 


dp = dynamic_cast (&b_ob); 
if(dp) cout <<"Xatolik\n"; 
else 
cout <<" tipni almashtirish "<<"(Base*=> 
myClass*) bajarilmadi.\n"; 
cout << endl; 
bp = &d_ob; // bp myClass ob'eyktiga 
koʻrsatkich 
dp = dynamic_cast (bp); 
if(dp) { 
cout << " bp ni myClass tipiga almashtirish 
bajarildi. "; 
dp->f(); 
} else cout << "Xatolik\n"; 
cout << endl; 
bp = &b_ob; // br Base ob'eyktiga koʻrsatkich 
dp = dynamic_cast (bp); 
if(dp) cout << "Xatolik"; 
else cout <<" bp myClass tipiga almashtirish 
bajarilmadi.\n"; 
cout << endl; 
dp = &d_ob; // dp myClass ob'eyktiga 
koʻrsatkich 
bp = dynamic_cast (dp); 
if(bp) { 
cout <<" dp ni myClass tipiga almashtirish 
bajarildi. "; 
bp->f(); 

else cout <<"Xatolik\n"; 
system("pause"); 
return 0; 

Dasturnatijasi: output 
tipni almashtirish (myClass* => myClass *) 
bajarildi. myClass sinfi orqali. 
tipni almashtirish (myClass* => Base *) bajarildi. 
myClass sinfi orqali. 
tipni almashtirish (Base* => Base *) bajarildi. 
Base sinfi orqali. 


tipni almashtirish (Base*=> myClass*) bajarilmadi. 
bp ni myClass tipiga almashtirish bajarildi. 
myClass sinfi orqali. 
bp myClass tipiga almashtirish bajarilmadi. 
dp ni myClass tipiga almashtirish bajarildi. 
myClass sinfi orqali. 

Download 383,42 Kb.
1   2   3   4   5   6   7




Download 383,42 Kb.
Pdf ko'rish