在C++中,dynamic_cast
用于在運行時進行類型轉換。它可以將指向基類的指針或引用轉換為指向派生類的指針或引用。
使用dynamic_cast
的語法如下:
dynamic_cast<目標類型>(表達式)
其中,目標類型
是要轉換的類型,表達式
是要轉換的指針或引用。
下面是一些使用dynamic_cast
的示例:
class Base {
public:
virtual void print() {
cout << "This is the base class." << endl;
}
};
class Derived : public Base {
public:
void print() override {
cout << "This is the derived class." << endl;
}
};
int main() {
Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->print(); // 輸出 "This is the derived class."
}
delete basePtr;
return 0;
}
在上面的示例中,basePtr
是一個指向基類對象的指針,我們使用dynamic_cast<Derived*>(basePtr)
將其轉換為指向派生類對象的指針。由于basePtr
指向的實際對象是派生類對象,所以轉換成功,dynamic_cast
返回了指向派生類對象的指針。我們可以使用該指針調用派生類的成員函數。
如果轉換失敗,即basePtr
指向的實際對象不是派生類對象,dynamic_cast
會返回nullptr
。因此,在使用dynamic_cast
進行類型轉換之前,我們應該先檢查轉換結果是否為nullptr
,以避免訪問空指針引發錯誤。
需要注意的是,dynamic_cast
只能用于指針或引用類型的轉換,不能用于轉換基本數據類型。此外,被轉換的類型必須是多態類型,即該類型至少包含一個虛函數。