您当前的位置: 首页 >  安全
  • 0浏览

    0关注

    483博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt开发高级进阶:C++中使用dynamic_cast实现父类与子类之间进行安全的类型转换

高精度计算机视觉 发布时间:2022-05-13 11:51:52 ,浏览量:0

通常,在C++中需要用到各种类型转换,典型的如const_cast, dynamic_cast, reinterpret_cast, static_cast。

这时讲两种实现办法: dynamic_cast和直接计算的办法

(1) dynamic_cast

最常用的,dynamic_cast: 动态类型转换,可以在父类与子类之间进行安全的类型转换,运行时类型检查,并且可以知道自己子类的类型。缺点是耗时稍微有点长。 reinterpret_cast: 强制类型转换,可以在不同类型之间进行强制转换,很难保证移植性。速度快。

这里不打算对各个类型转换进行详细解释,相关文档网络上相当多。这 里只重点讲一下dynamic_cast。

dynamic_cast最大的好处是可以用来进行“安全向下转换”。

假设有类A、B和C,如下,

class A {
};

class B : public class A {
};

class C : public class B {
};

A* pc = new C;

当我们将父类指针指向一个new出来的子类B或C对象时,那么可以使用dynamic_cast将该指针类型安全转换为C或B。

我们来运行一下下面的例子,重点是注意最后那个指针p_grand,


#include 
using namespace std;

template
inline bool instanceof(const T* ptr) {
    return dynamic_cast(ptr) != nullptr;
}

class GrandParent {
public:
    GrandParent() {}
    virtual void test() = 0;
};

class Parent : public GrandParent 
{
public:
    virtual ~Parent() {}
    virtual void test() { std::cout             
关注
打赏
1661664439
查看更多评论
0.0366s