基類和子類的類型轉換

綁定例外

一般指針和引用和要綁定的對象屬於同種類型,但基類指針或引用的綁定是一個例外。

靜態類型和動態類型

靜態類型編譯時就確定,動態類型是運行時查對象內存才知道。

靜態類型是Quote&,動態類型是運行時調用函數才知道。

一致情況

如果形參不是引用或指針,那麼靜態類型和動態類型一致


類型轉換

基類向派生類直接轉是不行的

Quote base;
Bulk_quote *bulkP = &base;  //xxx
Bulk_quote &bulkRef = base; //xxx

間接也不行 

Bulk_quote bulk;
Quote *itemP = &bulk;

Bulk_quote *bulkP = itemP; //xxx 

解釋:這兩種寫法直接檢查靜態類型,一看不合適就報錯。dynamic_cast會運行時幫忙檢查,而如果確定沒問題可以在編譯時用static_cast強制轉。

如果函數不是虛函數,那麼都會調用靜態類型的版本,就是基類的

調用基類版本會忽略掉子類的自己多定義的部分。

Bulk_quote bulk;
Quote item(bulk);  //調用Quote::Quote(const Quote&)

item = bulk; //調用Quote::operator =(const Quote&)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章