dynamic_cast是C++中的一種類(lèi)型轉(zhuǎn)換操作符,用于將基類(lèi)指針或引用轉(zhuǎn)換為派生類(lèi)指針或引用。其使用方式如下:
dynamic_cast<type*>(expression)
其中,type為欲轉(zhuǎn)換的目標(biāo)類(lèi)型,expression為欲轉(zhuǎn)換的指針或引用。
#include <iostream>
class Base {
public:
virtual void showMessage() {
std::cout << "This is the Base class." << std::endl;
}
};
class Derived : public Base {
public:
void showMessage() {
std::cout << "This is the Derived class." << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
// 使用dynamic_cast將基類(lèi)指針轉(zhuǎn)換為派生類(lèi)指針
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr != nullptr) {
derivedPtr->showMessage(); // 輸出: This is the Derived class.
}
delete basePtr;
return 0;
}
在上述示例中,Base類(lèi)是一個(gè)基類(lèi),Derived類(lèi)是其派生類(lèi)。首先,我們創(chuàng)建了一個(gè)指向Derived類(lèi)對(duì)象的Base類(lèi)指針basePtr。然后,使用dynamic_cast將basePtr轉(zhuǎn)換為Derived類(lèi)指針derivedPtr。由于basePtr指向的是Derived類(lèi)對(duì)象,所以轉(zhuǎn)換成功,derivedPtr不為nullptr,可以調(diào)用Derived類(lèi)的成員函數(shù)showMessage輸出相應(yīng)的信息。
需要注意的是,dynamic_cast只能用于具有多態(tài)性的類(lèi)(即含有虛函數(shù)的類(lèi)),否則會(huì)導(dǎo)致編譯錯(cuò)誤。此外,dynamic_cast只能用于指針或引用的轉(zhuǎn)換,不能用于基本類(lèi)型的轉(zhuǎn)換。