C++中的dynamic_cast是一種用于安全地將基類指針或引用轉換為派生類指針或引用的強制類型轉換操作符。它能夠在運行時檢查轉換是否有效,并返回正確的指針或引用。
dynamic_cast的語法如下:
dynamic_cast<new_type>(expression)
其中,new_type是要轉換的目標類型,expression是要轉換的指針或引用。
使用dynamic_cast時,需要滿足以下條件:
使用dynamic_cast時,會進行以下檢查:
以下是一個使用dynamic_cast的示例:
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "Base" << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "Derived" << std::endl;
}
};
int main() {
Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->print(); // 輸出 "Derived"
} else {
std::cout << "Failed to cast" << std::endl;
}
delete basePtr;
return 0;
}
在上面的示例中,Base類是一個基類,Derived類是一個派生類,它繼承了Base類。首先創建了一個Derived類的對象,并將其賦值給一個Base類的指針basePtr。然后使用dynamic_cast將basePtr轉換為Derived類的指針derivedPtr。由于Derived類是Base類的派生類,轉換是有效的,所以derivedPtr將指向Derived類的對象。最后調用derivedPtr的print()函數,輸出 “Derived”。
需要注意的是,dynamic_cast只能用于多態類型(即帶有虛函數的類),因為它需要在運行時進行類型檢查。如果不是多態類型,使用dynamic_cast會導致編譯錯誤。