C 中dynamic cast的使用方法

2022-08-16 22:03:13 字數 868 閱讀 4997

/*這是從網上摘下的例子,主要講述了 dynamic_cast<> 的使用方法。*/ 

/* 作用:將乙個基類物件指標(或引用)cast到繼承類指標,dynamic_cast會根據基類指標是否真正指向繼承類指標來做相應處理, 

即會作一定的判斷。 

對指標進行dynamic_cast,失敗返回null,成功返回正常cast後的物件指標; 

對引用進行dynamic_cast,失敗丟擲乙個異常,成功返回正常cast後的物件引用。 

注意:dynamic_cast在將父類cast到子類時,父類必須要有虛函式。例如在下面的**中將cbasic類中的test函式不定義成 

virtual時,編譯器會報錯:error c2683: dynamic_cast : 「cbasic」不是多型型別 

對編譯器的要求: 

dynamic_cast<> 會用到rtti技術,因此需要啟動「執行時型別資訊」這一選項,而在vc.net 2003中預設是關閉的。 

所以需要人為的啟動這一選項。否則編譯器會報下面的警告: 

warning c4541: 「dynamic_cast」用在了帶 /gr- 的多型型別「cbasic」上; 

可能導致不可預知的行為從而導致程式在執行時發生異常。 

該設定在 project->setting中 c/c++ -> c++ language中設定。 

*/ #include

using namespace std; 

class cbasic 

// 一定要是 virtual 

}; class cderived : public cbasic 

}; int main() 

**論壇的文章,位址使用中發現紅字部分以前沒注意過

C 中dynamic cast 的使用方法

分類 c 2011 12 15 14 19 5117人閱讀收藏 舉報c 編譯器iostream class object null 這是從網上摘下的例子,主要講述了 dynamic cast 的使用方法。作用 將乙個基類物件指標 或引用 cast到繼承類指標,dynamic cast會根據基類指標是...

C 中的dynamic cast 操作符

c 提供了四種強制轉型的方式,除了dynamic cast是在執行中被決議,其它三種在編譯期即可被決議。聯想c 中多型的實現,可以想到既然能在執行中決議,必然和rtti有關 rtti 是 runtime type information 的縮寫,意思是 執行時型別資訊。它提供了執行時確定物件型別的方...

C 中深入理解dynamic cast

一 指標型別的dynamic cast 如果一條dynamic cast語句的轉換目標是指標型別並且轉換失敗了,會返回乙個空指標,則判斷條件為0,即為false 如果轉換成功,指標為非空,則判斷條件為非零,即true。這樣做可以確保型別轉換和條件檢查在同一條表示式中完成 if derived pd ...