dynamic_cast主要用于有继承关系的多态类(基类必须有虚函数)的指针或引用之间的转换。
1.通过dynamic_cast,将派生类指针转换为基类指针(上行转换),这个操作与static_cast的效果是一样的。
2.通过dynamic_cast,将基类指针转换为派生类指针(下行转换),dynamic_cast具有类型检查的功能,比static_cast更安全(如果转换的是指针,失败时会返回空指针;如果转换的是引用,会抛出std::bad_cast异常)
#include <iostream>
using namespace std;
class B{
public:
int m_b;
virtual void f(){};
};
class D:public B{
public:
int m_d;
};
B* doUpCast(D* pd)
{
B* pb = dynamic_cast<B*>(pd);
cout<<"doUpCast convert pd:"<<pd<<" to pb="<<pb<<endl;
return pb;
}
D* doDownCast(B* pb)
{
D* pd = dynamic_cast<D*>(pb);
if(pd =
dynamic_cast是C++中用于多态类之间转换的重要工具,尤其在基类和派生类指针或引用之间。它在上行转换时等同于static_cast,但在下行转换时提供类型检查,确保安全。当转换失败时,dynamic_cast会返回空指针(针对指针)或抛出std::bad_cast异常(针对引用)。
订阅专栏 解锁全文

4327

被折叠的 条评论
为什么被折叠?



