文章目录
dynamic_cast基本用法
用于类的指针、类的引用或者void *转化。其实这种转化方法主要是为了实现多态情景下,父类指针想要调用子类特有函数。
转换格式:dynamic_cast<变量类型>(所转换的变量名)
实现场景:只在多态下有效
dynamic_cast为什么只在多态的继承关系才有效?
代码在运行时时类型检查需要运行时类型信息,而dynamic
_cast所转化的信息存储在类的虚函数表。
代码讲解
需注意:
- 如果所转化的是指针,进行正确的转换,获得对应的值,否则返回NULL;
- 如果是引用,则在运行时就会抛出异常;
#include <iostream>
using namespace std;
class Base{
public:
virtual void Test(){ // virtual 多态
cout << "Base:" << __func__ << endl;
}
};
class Derive:public Base{
public:
void Test(){
cout << "Derive:" << __func__ << endl;
}
void Func(){
cout << "Derive:" << __func__ << endl;
}
};
int main(){
Base* k = new Derive;
k->Test();
Derive* kk = dynamic_cast<Derive*>(k); // 转化之后返回NULL
if(NULL!=kk) kk->Func();
}