15 3 2 基類到派生類的轉換

2021-08-21 03:57:49 字數 783 閱讀 6898

從基類到派生類的自動轉換是不存在的。需要派生類物件時不能使用基類物件。

item_base base;

bulk_item * bulkp = &base;   //error : can't convert base to derived

bulk_tiem& bulkref = base;  // error : can't convert base to dervied

bulk_item bulk = base;   //   error :  can't convert base to derived

沒有從基類型別到派生類型別的自動轉換,原因在於基類物件只能是基類物件,它不包含

派生類的成員,如果允許用基類物件給派生類物件賦值,那麼就可以試圖使用該派生類物件訪問不存在的成員。

有時更令人驚訝的是,甚至當基類指標或者引用實際繫結到派生類物件時,從基類到派生類的轉換也存在限制。

bulk_item bulk;

item_base *itemp = &bulk;  // ok : dynamic type id bulk_item

bulk_item *bulkp = itemp;  // error : can't convert base to derived 

編譯器在編譯時無法知道特定轉換在執行時實際是安全的。

編譯器確定轉換是否合法,只看指標或引用的靜態型別。

在這些情況下,如果知道從基類到派生類的轉換時安全的。就可以用static_cast強制編譯器進行轉換,

或者可以用dynamic_cast申請在執行時進行檢查。

派生類到基類的轉換 和基類到派生類的轉換

一 基類與派生類的轉換 3種繼承方式 公用 保護 私有繼承 中,公用派生類才是基類真正的子型別,它完整地繼承了基類的功能。不同型別資料之間在一定條件下可以進行型別的轉換。基類與派生類物件之間是否也有賦值相容的關係,可否進行型別間的轉換?回答是可以的。基類與派生類物件之間有賦值相容關係,由於派生類中包...

基類與派生類的轉換

一 基類與派生類的轉換 3種繼承方式 公用 保護 私有繼承 中,公用派生類才是基類真正的子型別,它完整地繼承了基類的功能。不同型別資料之間在一定條件下可以進行型別的轉換。基類與派生類物件之間是否也有賦值相容的關係,可否進行型別間的轉換?回答是可以的。基類與派生類物件之間有賦值相容關係,由於派生類中包...

基類與派生類的轉換

一 基類與派生類的轉換 3種繼承方式 公用 保護 私有繼承 中,公用派生類才是基類真正的子型別,它完整地繼承了基類的功能。不同型別資料之間在一定條件下可以進行型別的轉換。基類與派生類物件之間是否也有賦值相容的關係,可否進行型別間的轉換?回答是可以的。基類與派生類物件之間有賦值相容關係,由於派生類中包...