#include
using namespace std;
#include
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(pa);//pa是指向B類型的基類指針,OK
//C* pc = dynamic_cast(pa); //pa不是指向C類型的基類指針,error
B b1;
A& ra = b1;
B& b2 = dynamic_cast(ra);
//C& c1 = dynamic_cast(ra);error
return 0;
}
上面兩個錯誤都是,編譯時不報錯,運行時報錯.
dynamic_cast主要是將指向子類的基類指針轉(zhuǎn)化為子類的指針
轉(zhuǎn)換過程中會檢查目標和期望轉(zhuǎn)換的對象是否一致,一致轉(zhuǎn)換
成功,否則失敗,如果轉(zhuǎn)換為指針,則失敗返回NULL,如果是引用失敗
返回bad_cast異常
分享文章:dynamic_cast<type-id>(expression)
文章網(wǎng)址:
http://weahome.cn/article/gedods.html