阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 關務特種考試_四等_資訊處理:程式設計概要#107605
科目:程式設計
年份:111年
排序:0

題組內容

一、有關 C++物件導向程式設計,請回答下列問題:

申論題內容

(三)那個運算子可以用於安全地向下轉換(downcast)基底類別指標?

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

dynamic_cast

詳解 提供者:hchungw
在C++中,向下轉換(downcasting)是將基底類別的指標或參考轉換為派生類別指標或參考的過程。為了安全地進行這種轉換,你應該使用 dynamic_cast 運算子。這是因為 dynamic_cast 在運行時進行類型檢查,僅當對象確實是目標類型或目標類型的派生類型時,轉換才會成功。

Base* b = new Derived;
// ...
Derived* d = dynamic_cast<Derived*>(b);
if (d) {
    // b 確實指向一個 Derived 類型的對象,轉換成功
}
如果轉換失敗,dynamic_cast 會返回空指標(對於指標類型)或拋出 std::bad_cast 異常(對於引用類型)。這樣可以確保轉換的安全性。
需要注意的是,dynamic_cast 要求基底類別至少有一個虛函數,這通常意味著它至少有一個虛構造函數。此外,dynamic_cast 的運行時檢查帶來了性能成本,因此在性能敏感的代碼中應謹慎使用。
對於那些知道確定的類型轉換是安全的情境,可以使用 static_cast。但是,static_cast 不進行運行時檢查,所以使用它進行向下轉換時必須非常確信該轉換是安全的,否則可能會導致未定義行為。