|
Tiplarni dinamik tarzda aniqlash. Reja: Tiplarni dinamik tarzda aniqlash
|
bet | 9/143 | Sana | 20.07.2024 | Hajmi | 0,81 Mb. | | #268096 |
Bog'liq Tiplarni dinamik tarzda-fayllar.org1.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.
|
| |