1. 程式人生 > >關於 C++ 中的強制轉換 - 基礎篇

關於 C++ 中的強制轉換 - 基礎篇

## 引言 假設有基類 `A`,包含了虛擬函式 `func1`,以及有派生類 `B`,繼承於類 `A`,派生類 `B` 中實現了函式 `func1`。此時可以用 `A` 型別的指標指向 `B` 型別的物件,並用 `A` 型別的指標呼叫 `B` 型別物件中的函式 `func1`。這時,就形成了**多型**。包含虛擬函式的類 `A`,我們也稱為**多型類**。 由於派生類 `B` 完整包含了 基類 `A` 的所有定義,將 `B` 型別的指標轉換為 `A` 型別的指標**總是安全的**。 而將 `A` 型別的指標強制轉換為 `B` 型別的指標時,如果 `A` 型別指標指向的物件確實為 `B` 型別的物件,那麼轉換**也是安全的**。此時,該 `B` 型別物件被稱為完整物件(complete object)。 ## 強制轉換有哪些型別? C++ 包含了以下幾種強制轉換運算子,這些運算子用於消除老式 C 語言轉換中的存在的歧義和隱患: > - `dynamic_cast` > - `static_cast` > - `const_cast` > - `reinterpret_cast` > - `safe_cast` 本文會著重介紹如何使用 `dynamic_cast` 和 `static_cast`。 提醒: > 除非必須,不要使用 `const_cast` 和 `reinterpret_cast`,因為它們存在一些老式 C 語言轉換中的隱患。 ### `dynamic_cast` 運算子 語法: ``` dynam