什么是dynamic_cast static_cast
来源:互联网 发布:怎么获取股票实时数据 编辑:程序博客网 时间:2024/06/04 00:51
static_cast与dynamic_cast只知道是基类与派生类的转化关系,但具体是什么的?
派生类也包括基类部分,这说明派生类可以像基类一样在派生类对象上执行操作,因为派生类也有基类的性质,所以存在派生类引用到基类类型引用的类型转换,即可以将派生类的引用转化成基类子对象的引用。
基类类型的对象可以作为独立的对象存在,也可以作为派生类对象的一部分存在,因此一个基类对象可能是也可能不是一个派生类的一部分,所以没有基类引用到派生类引用的转换。
base *pb=new base;
derive *pd=dynamic_cast<derive*>(pd);编译正确,但是不安全
derive *pd1=ststic_cat<derive*>(pd);编译正确,运行正确
base *pb=new derive;
derive *pd=dynamic_cast<derive*>(pd);正确,并且安全
derive *pd=new base;//错,基类无法自动转换为派生类
derive *pd=new derive;
base *pb=pd;//可以自动转化
由此,可以注意到,转化只是基类到派生类的。
基类到派生类的转换
#include<iostream>using namespace std;class base{public: base():i(0){cout<<"default constructor"<<endl;} base(int i):i(i){std::cout<<"base constructor"<<endl;} base& operator=(const base &right); ~base(){std::cout<<"base destructor "<<i<<endl;} virtual void fun(){std::cout<<"fun in base "<<i<<endl;}private: int i;};base& base::operator=(const base &right){ cout<<"assignment in base"<<endl; i=right.i; return *this;}class derive:public base{public: friend class buddy; derive():j(0){cout<<"default constructor"<<endl;} derive(int j):j(j){cout<<"derive constructor"<<endl;} derive& operator=(const derive &right){cout<<"assignment in derive"<<endl;j=right.j;return *this;} ~derive(){cout<<"derive destructor "<<j<<endl;} void fun(){cout<<"fun in derive "<<j<<endl;}private: int j;};class buddy{public: void fun(){cout<<"fun in buddy"<<endl;}};int main(){ base *pb=new base(2); derive *pd=dynamic_cast<derive*>(pb); pb->fun(); if(pd) pd->fun(); else cout<<"turn error"<<endl; return 0;}
int main(){ base *pb=new base(2); derive *pd=ststic_cast<derive*>(pb); pb->fun(); if(pd) pd->fun(); else cout<<"turn error"<<endl; return 0;}
结果说明:dynamic_cast依然是返回一个空指针以表示转换是不成立的;static_cast虽然不是空指针,但是结果不对,因为结果应该是"fun in derive ",因此也是转换失败
0 0
- 什么是dynamic_cast static_cast
- dynamic_cast & static_cast
- dynamic_cast,static_cast
- dynamic_cast,static_cast
- static_cast & dynamic_cast
- dynamic_cast & static_cast
- dynamic_cast & static_cast
- dynamic_cast与static_cast讨论
- type_cast、static_cast和dynamic_cast
- static_cast, dynamic_cast, const_cast探讨
- [copy]static_cast, dynamic_cast, safe_cast
- static_cast,dynamic_cast和reinterpret_cast
- static_cast和dynamic_cast
- static_cast 与dynamic_cast
- dynamic_cast与static_cast
- static_cast vs dynamic_cast
- dynamic_cast、const_cast、static_cast、reinterpret_cast
- static_cast, dynamic_cast, const_cast, reinterpret_cast
- openssh-7.5p1升级
- IsWindow
- Python基础小记
- 两个bat文件传递参数
- DataBinding
- 什么是dynamic_cast static_cast
- soapui_1_下载,安装
- C++primer plus第十七章编程练习
- Win8操作系统添加系统语言
- SQL Server: 消除科学计数法,显示完整的小数格式
- iOS开发:过滤网络请求中,服务器返回空值null数据的处理(过滤null显示问题)
- 【转】再次写给VC++Windows开发者
- MS Report Service 报表如何设置参数
- Redis压缩列表原理与应用分析