您好,登錄后才能下訂單哦!
#include <iostream> using namespace std; #include <typeinfo> class A{ public: virtual void foo(void){} }; class B:public A{ void foo(void){} }; class C:public A{ void foo(void ){} }; int main(void){ B b; A* pa= &b; B* pb = dynamic_cast<B*>(pa);//pa是指向B類型的基類指針,OK //C* pc = dynamic_cast<B*>(pa); //pa不是指向C類型的基類指針,error B b1; A& ra = b1; B& b2 = dynamic_cast<B&>(ra); //C& c1 = dynamic_cast<C&>(ra);error return 0; } 上面兩個錯誤都是,編譯時不報錯,運(yùn)行時報錯. dynamic_cast主要是將指向子類的基類指針轉(zhuǎn)化為子類的指針 轉(zhuǎn)換過程中會檢查目標(biāo)和期望轉(zhuǎn)換的對象是否一致,一致轉(zhuǎn)換 成功,否則失敗,如果轉(zhuǎn)換為指針,則失敗返回NULL,如果是引用失敗 返回bad_cast異常
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。