在C 中使用靜態轉換進行向下轉型
在物件導向程式設計中,向下轉換是一種用於將指向基底類別的指標轉換為指向衍生類別的指標。在 C 中,這可以使用 static_cast 運算子來完成。
考慮以下程式碼:
class Base { public: Base() {} virtual void func() {} }; class Derived : public Base { public: Derived() {} void func() {} void func_d() {} int a; }; int main() { Base *b = new Base(); std::cout << sizeof(*b) << std::endl; // Prints 4 Derived *d = static_cast<Derived *> (b); // Downcast the base pointer to a derived pointer std::cout << sizeof(*d) << std::endl; // Prints 8 d->func_d(); // Calls the derived class function }
在此程式碼中,基底類別指標最初指向 Base 物件。使用 static_cast,我們將基底指標向下轉換為衍生類別指標。 sizeof 運算子顯示派生指標現在指向一個更大大小(8 位元組)的對象,其中包括 Derived 類別的成員。
但是,需要注意的是,此處執行的向下轉換是無效的。只有當基底指標指向的物件實際上是衍生類別的實例時,Static_cast 才允許轉換。在這種情況下,Base 對像不是 Derived 對象,導致向下轉型未定義行為。
根據 C 標準,使用 static_cast 向下轉型遵循以下規則:
如果不符合這些條件,則強制轉換將導致未定義的行為。因此,仔細執行向下轉換並確保轉換的有效性至關重要。
以上是C 中向下轉型的靜態轉型何時是安全的以及何時會導致未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!