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
{
cout
<< "不是狗, 别骗我!" << endl
;
}
Cat
* pCat
= dynamic_cast
<Cat
*>(animal
);
if (pCat
)
{
pCat
->play();
}
else
{
cout
<< "不是猫, 别骗我!" << endl
;
}
}
int main(void)
{
Dog
* dog1
= new
Dog();
Animal
* a1
= dog1
;
Dog dog2
;
animalPlay(dog2
);
Cat
* cat1
= new
Cat();
Animal
* a2
= cat1
;
Cat cat2
;
animalPlay(cat2
);
system("pause");
return 0;
}
结语:
时间: 2020-07-02