https://blog.csdn.net/u012411498/article/details/80804755
//dynamic_cast 上下行转换都需要虚函数
#include <iostream>
using namespace std;
class B
{
public:
B(){}
virtual void foo(){};
//void foo(){};//必须要是虚函数
};
class D:public B
{
public:
virtual void foo(){cout << "DDD" << endl;}
//void foo(){cout << "DDD" << endl;}//必须要是虚函数
int num;
D():num(10){}
};
void func(B *pb)
{
D *pd1 = static_cast<D*>(pb);
if(pd1 == NULL)
{
cout << "pd1 is NULL" << endl;
}
else
{
cout << "pd1->num:" << pd1->num << endl;
}
D *pd2 = dynamic_cast<D*>(pb);
if(pd2 == NULL)
{
cout << "pd2 is NULL" << endl;
}
else
{
cout << "pd2->num:" << pd2->num << endl;
}
}
int main()
{
D *d = new D();
d->num = 100;
B *a = d;
B *a1 = new B();
//cout << a->num << endl;
cout << "func1" << endl;
func(a);
cout << "func2" << endl;
func(a1);
}
注意:
dynamic_cast的实现必须要有虚函数表的存在
dynamic_cast必须要是指针或者引用的转换(个人认为就是因为指针引用才能和虚函数结合,正是多肽的实现)