久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
dynamic_cast淺析
[打印本頁]
作者:
heicc
時間:
2015-1-5 14:27
標題:
dynamic_cast淺析
廢話不多說,直接給結論:
class base
{
public:
base(){}
virtual ~base(){}
int m_a;
virtual void setA()
{
m_a = 0;
}
};
class A : public base
{
public:
A(){}
virtual ~A(){}
virtual void setA()
{
m_a = 1;
}
virtual void setAA()
{
m_a = 2;
}
};
情況1:
base newBase = new base;
A* newA = dynamic_cast< A* > ( newBase ); //返回值為NULL,編譯無問題,但實際根本不能用
newA->setAA(); //報錯,因為newA=NULL
結論1:
基類指針強制變換為子類指針后,若基類指針指向的是一個基類實體,那么雖然編譯沒有問題,可完全無法實際使用,即轉換失敗!
情況2:
base newBase = new A;
A* newA = dynamic_cast< A* > ( newBase ); //OK
newA->setAA(); //OK
結論2:
基類指針強制變換為子類指針后,若基類指針指向的是一個子類實體,轉換成功,調用子類新增的成員函數(shù)沒有問題!
情況3:
base newBase = new A;
A* newA = dynamic_cast< A* > ( newBase ); //OK
newA->setA(); //OK
結論3:
基類指針強制變換為子類指針后,若基類指針指向的是一個子類實體,轉換成功,調用子類虛函數(shù)(在這個實例里實際就是重構)沒有問題,不會發(fā)生調用錯函數(shù)的問題!
情況4:
A* newA = new A;
base* newbase = dynamic_cast< base* > ( newA ); //OK
newbase->setA(); //OK,由于是虛函數(shù)所以執(zhí)行的是A中的setA();
結論4:
偉大的虛函數(shù)功能并沒有因為強制轉換而消失!再次膜拜偉大的RTTI!
情況5:
A* newA = new A;
base* newbase = dynamic_cast< base* > ( newA );
newbase->setAA(); //成員函數(shù)不存在,無法編譯通過
結論5:
不解釋。
最后的結論:
在繼承體系中,上行轉換(子類->基類)dynamic_cast與static_cast功能完全一樣,有效且安全;
下行轉換(基類->子類)則必須視基類實際指向的對象類型而定,只有基類指向的對象為子類類型時才有效且安全!
多日后再思考,又出現(xiàn)一個新想法,嘗試:
class subBase
{public:
subBase(){}
virtual ~subBase(){}
int m_b;
virtual void setB()
{
m_b = 10;
}
};
class multiA : public base, public subBase
{
public:
multiA(){};
virtual ~multiA(){};
virtual void setA()
{
m_a = 3;
}
virtual void setB()
{
m_b = 11;
}
};
情況6:
base* newbase = new multiA ;
subBase* newsubbase = dynamic_cast< subBase* > ( newbase );
newsubbase->setB(); //OK m_b = 11;
結論6:
在多重繼承的情況下,只要指針實際指向對象為子類對象,那么對于指向子類對象的基類指針,可以使用dynamic_cast在不同基類之間相互轉換,轉換后對應基類的虛函數(shù)特性得到保存。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99视频免费播放
|
福利视频亚洲
|
欧美日韩综合精品
|
国产日韩久久久久69影院
|
国产精品揄拍一区二区久久国内亚洲精
|
成人精品一区
|
99精品网
|
欧美日韩中文在线
|
日韩一区在线播放
|
中文字幕电影在线观看
|
伊人狠狠干
|
日本特黄a级高清免费大片 成年人黄色小视频
|
黄色一级毛片
|
中文字幕一区二区三区四区五区
|
久久在线视频
|
亚洲精品9999久久久久
|
日韩精品一区二区三区视频播放
|
欧美a区
|
九九综合九九
|
国产免费看
|
日韩色视频
|
欧美福利
|
国产精品一区二区视频
|
7777久久
|
国产精品色哟哟网站
|
性色在线
|
91精品国产91久久久久久最新
|
午夜电影福利
|
日韩高清中文字幕
|
成人精品鲁一区一区二区
|
国产精品二区三区在线观看
|
久久精品色欧美aⅴ一区二区
|
国产三级在线观看播放
|
国内精品久久精品
|
国产在线精品一区二区三区
|
国产欧美一区二区三区日本久久久
|
国产精品不卡一区
|
日韩精品一区二区三区久久
|
成人在线免费视频
|
欧产日产国产精品国产
|
亚洲vs天堂
|