dynamic_cast: 动态类型转换,可以在父类与子类之间进行安全的类型转换,运行时类型检查,并且可以知道自己子类的类型
reinterpret_cast: 强制类型转换,可以在不同类型之间进行强制转换,很难保证移植性。
具体看下面代码和具体注释:
#include<iostream>
using namespace std;
class Tree {};
class Animal
{
public:
virtual void cry() = 0;
void print()
{
cout << "测试" << endl;
}
};
class Dog : public Animal
{
public:
virtual void cry()
{
cout << "汪汪" << endl;
}
void doHome()
{
cout << "看家" << endl;
}
};
class Cat : public Animal
{
public:
virtual void cry()
{
cout << "喵喵" << endl;
}
void doThing()
{
cout << "抓老鼠" << endl;
}
};
void playObj(Animal* base)
{
base->cry(); // 1有继承 2虚函数重写 3 父类指针 指向子类对象 ==>多态
//能识别子类对象
// dynamic_cast 运行时类型识别 RIIT
Dog* pDog = dynamic_cast<Dog*>(base); //dynamic_cat强制类型转换,其可以知道自己的子类是什