從圖中可以看出,派生類不僅有自己的方法和屬性,同時它還包括從父類繼承來的方法和屬性。當我們從派生類向基類轉換時,不管用傳統的c語言還是c++轉換方式都可以百分百轉換成功。但是可怕是向下轉換類型,也就是我們從基類向派生類轉換,當我們采用傳統的C語言和c++轉換時,就會出現意想不到的情況,因為轉換后派生類自己的方法和屬性丟失了,一旦我們去調用派生類的方法和屬性那就糟糕了,這就是對類繼承關系和內存分配理解不清晰導致的。好在c++增加了static_cast和dynamic_cast運用於繼承關系類間的強制轉化。
static_cast詳解:
static_cast相當於傳統的C語言里的強制轉換,該運算符把expression轉換為new_type類型,用來強迫隱式轉換如non-const對象轉為const對象,編譯時檢查,用於非多態的轉換,可以轉換指針及其他,但沒有運行時類型檢查來保證轉換的安全性。它主要有如下幾種用法:
①用於類層次結構中基類(父類)和派生類(子類)之間指針或引用的轉換。
進行上行轉換(把派生類的指針或引用轉換成基類表示)是安全的;
進行下行轉換(把基類指針或引用轉換成派生類表示)時,由於沒有動態類型檢查,所以是不安全的。
②用於基本數據類型之間的轉換,如把int轉換成char,把int轉換成enum。
③把空指針轉換成目標類型的空指針。
④把任何類型的表達式轉換成void類型。
注意:static_cast不能轉換掉expression的const、volatile、或者__unaligned屬性
————————————————
版權聲明:本文為CSDN博主「hwg2214」的原創文章,遵循CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u014624623/article/details/79837849