dynamic_cast的问题

doolin doolin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
dynamic_cast是被用于安全的沿着类的继承关系向下进行类型转换.
看这个例子:
class Class
{
public:
Class(){
cout << "10" << endl;
}
virtual ~Class(){
cout << "11" << endl;
}

};

class Class_A : public Class
{
public:
Class_A(){
cout << "20" << endl;
}
virtual ~Class_A(){
cout << "21" << endl;
}
};

class Class_B : public Class_A{
public:
Class_B(){
cout << "30" << endl;
}
virtual ~Class_B(){
cout << "31" << endl;
}
};

但为什么这样的转换也会成功:
Class_B *pb = new Class_B;
Class_A *pa = dynamic_cast<Class_A *>(pb);
这样不是向上转换吗?
...全文

相关推荐

dynamic_cast,static_cast 和 reinterpret_cast

讨论 dynamic_cast,static_cast<> 和 reinterpret_cast<> and Runtime Type Information

ecomprj

C++ dynamic_cast详解[项目代码]

本文详细介绍了C++中的dynamic_cast和std::dynamic_pointer_cast的使用方法、原理及实际应用场景。dynamic_cast主要用于多态类之间的类型转换,其返回值根据转换类型的不同而有所区别。文章通过具体的代码示例展示了基类转子类、子类转基类以及子类之间转换的结果,并强调了在实际开发中正确使用dynamic_cast的重要性。此外,还介绍了std::dynamic_pointer_cast的原理和使用方法,特别适用于智能指针的类型转换。最后,文章强调了在多态类型转换时使用dynamic_cast并检查转换结果是否为nullptr的最佳实践。

h6j7k8l9p0

static_cast与dynamic_cast详解[项目代码]

本文详细介绍了C++中的static_cast和dynamic_cast两种类型转换运算符。static_cast类似于传统的C语言强制转换,适用于非多态类型的转换,如基本数据类型转换、类层次结构中的上行转换等,但不具备运行时类型检查,下行转换不安全。dynamic_cast则专门用于类层次间的转换,支持上行、下行及交叉转换,具有运行时类型检查功能,更安全但性能开销较大。文章通过代码示例和注意事项,强调了合理使用类型转换的重要性,避免潜在风险。

Tomato

C++ dynamic_cast与typeid详解[项目代码]

本文详细介绍了C++中的dynamic_cast和typeid的工作原理及其应用场景。dynamic_cast用于运行时类型识别(RTTI),支持downcast、upcast和crosscast操作,但要求操作对象必须为多态类型(含有虚函数)。文章通过多个代码示例展示了dynamic_cast的使用方法及其与static_cast的区别。此外,还介绍了typeid操作符,它返回对象的类型信息type_info,并提供了type_info的定义及其常用方法。最后,文章引用了《深度探索C++对象模型》和《The C++ Programming Language》作为参考资料。

moon

C++四种cast转换[源码]

本文详细介绍了C++中的四种类型转换方式:dynamic_cast、static_cast、const_cast和reinterpret_cast。dynamic_cast主要用于有继承关系和多态的类之间的转换,确保类型安全;static_cast适用于多种类型转换,但不进行安全检查;const_cast用于去除const属性,允许修改原本为常量的值;reinterpret_cast功能强大但安全性低,可实现不相关类型之间的转换。文章通过示例代码展示了每种转换的具体用法和注意事项,帮助读者理解其适用场景和潜在风险。

yy01234
评论 5
收藏 已收藏
分享
返回顶部
doolin
C++ 语言 65,214 成员 250,514 内容