C++类型转换dynamic_cast解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++类型转换dynamic_cast解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2040字,纯文字阅读大概需要3分钟。
内容图文
![C++类型转换dynamic_cast解析](/upload/InfoBanner/zyjiaocheng/1075/e00eebc610744651a709db162fbcac13.jpg)
C++的类型转换有四种 const_cast, reinterpret_cast, static_cast, dynamic cast
这边举一个dynamic cast的小例子
#include <iostream> using namespace std; class BaseClass{ public : int m_iNum; virtual void foo() {}; //基类必须有虚函数。保持多态特性才能使用dynamic_cast }; class DerivedClass : public BaseClass{ public : char* m_szName; DerivedClass(char* str) { m_szName = new char[strlen(str) + 1]; strcpy(m_szName, str); } ~DerivedClass(){ if(m_szName != NULL){ delete []m_szName; m_szName = NULL; } } void bar() {}; }; int main() { //64位系统, int:4, vtable_prt:8 输出为16 cout << "sizeof(BaseClass) = " << sizeof (BaseClass) << endl; //64位系统, 4 + 8 + 8 = 24 cout << "sizeof(DerivedClass) = " << sizeof (DerivedClass) << endl; char *p = "abc"; BaseClass *pb = new DerivedClass(p); cout << "sizeof(*pb): " << sizeof (*pb) << endl; // 16 DerivedClass *pd1 = static_cast<DerivedClass *>(pb); //子类->父类,静态类型转换,正确但不推荐 DerivedClass *pd2 = dynamic_cast<DerivedClass *>(pb); //子类->父类,动态类型转换,正确 cout << pd1->m_szName << endl; //abc cout << pd2->m_szName << endl; //abc cout << "sizeof(*pd1): " << sizeof (*pb) << endl; //16 cout << "sizeof(*pd2): " << sizeof (*pb) << endl; //16 BaseClass* pb2 = new BaseClass(); DerivedClass *pd21 = static_cast<DerivedClass *>(pb2); //父类->子类,静态类型转换,危险!访问子类m_szName成员越界 DerivedClass *pd22 = dynamic_cast<DerivedClass *>(pb2); //父类->子类,动态类型转换,安全的。结果是NULL cout << "sizeof(*pd21): " << sizeof (*pb) << endl; //16 cout << "sizeof(*pd22): " << sizeof (*pb) << endl; //16 cout << pd21 <<endl; //0x7f9a7b403a60 //如果访问 pd21 -> m_szName则segmentation fault cout<< pd22 <<endl; //0 这里是NULL return 0; }
输出结果为:
sizeof(BaseClass) = 16 sizeof(DerivedClass) = 24 sizeof(*pb): 16 abc abc sizeof(*pd1): 16 sizeof(*pd2): 16 0x7f9a7b403a60 0 sizeof(*pd21): 16 sizeof(*pd22): 16
原文:http://blog.csdn.net/tuantuanls/article/details/42875981
内容总结
以上是互联网集市为您收集整理的C++类型转换dynamic_cast解析全部内容,希望文章能够帮你解决C++类型转换dynamic_cast解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。