dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针;
可以在执行期决定真正的类型;
与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系;
更准确的说,dynamic_cast是用来检查两者是否有继承关系;
用法
dynamic_cast <type-id> (expression)
该运算符把expression转换成type-id类型的对象;Type-id 必须是类的指针、类的引用或者void*;
// castdemo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
class B
{
public:
int m_iNum;
virtual void foo() {};
};
class D:public B
{
public:
char* m_szName[100];
};
void myfunc(B* pb)
{
D* pd1 = static_cast<D*>(pb);
D* pd2 = dynamic_cast<D*>(pb);
std::cout << pd1 << std::endl;
std::cout << pd2 << std::endl;
}
int main(int argc, char* argv[])
{
B b1;
myfunc(&b1);
D d1;
myfunc(&d1);
return 0;
}
如果 pb 指向一个 D 类型的对象,pd1 和 pd2 是一