#include <iostream>
using namespace std;
class A
{
public:
virtual void display()
{
cout << "A::display()" << endl;
}
};
class B :public A
{
public:
void display()
{
cout << "B::display()" << endl;
}
};
void main()
{
A a;
B b;
A* pa;
B* pb;
pa = &b;//多态性
pa->display();//输出B::display()
pb = (B*)pa;//由于pa是指向B类对象的,所以这里可以这样写,但是不安全
pb->display();//输出B::display()
//dynamic_cast必须用在使用了虚函数的类的继承层次中,否则编译出错
pb = dynamic_cast<B*>(pa);//注意括号不能少
if (pb != nullptr)//条件为真
pb->display();//输出B::display()
pa = &a;
pb = nullptr;
pb = (B*)pa;//如果不用dynamic_cast,这里的转换仍会发生,所以这种写法是错误的
pb->display();//输出A::display()
pb = dynamic_cast<B*>(pa);//由于pa指向A类对象,所以这里的转换不会成功,pb为nullptr
if (pb != nullptr)//条件为假
pb->display();//不执行
getchar();
}
C++的dynamic_cast用法
猜你喜欢
转载自blog.csdn.net/csdn_gddf102384398/article/details/87949672
今日推荐
周排行