dynamic_cast
動態類型轉換
將一個基類對象指針cast到繼承類指針,dynamic_cast 會根據基類指針是否真正指向繼承類指針來做相應處理。失敗返回null,成功返回正常cast後的對象指針;
將一個基類對象引用cast 繼承類對象,dynamic_cast 會根據基類對象是否真正屬於繼承類來做相應處理。失敗拋出異常bad_cast
注意:dynamic_cast在將父類cast到子類時,父類必須要有虛函數一起玩。
demo 代碼(一)
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void cry() = 0;
};
class Cat : public Animal
{
public:
void cry()
{
cout << "喵喵" << endl;
}
void play()
{
cout << "爬樹" << endl;
}
};
class Dog :public Animal
{
public:
void cry()
{
cout << "旺旺" << endl;
}
void play()
{
cout << "溜達溜達" << endl;
}
};
void animalPlay(Animal* animal)
{
animal->cry();
Dog* pDog = dynamic_cast<Dog*>(animal);
if (pDog)
{
pDog->play();
}
else /* pDog == NULL */
{
cout << "不是狗, 別騙我!" << endl;
}
Cat* pCat = dynamic_cast<Cat*>(animal);
if (pCat)
{
pCat->play();
}
else /* pDog == NULL */
{
cout << "不是貓, 別騙我!" << endl;
}
}
int main(void)
{
Dog* dog1 = new Dog();
Animal* a1 = dog1;
//animalPlay(a1);
Dog dog2;
animalPlay(dog2);
Cat* cat1 = new Cat();
Animal* a2 = cat1;
//animalPlay(a2);
Cat cat2;
animalPlay(cat2);
system("pause");
return 0;
}
結語:
時間: 2020-07-02