通常,在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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?