文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解C++中四种类型的转换

2022-12-08 20:57

关注

C语言中我们使用 int a=(int) b;的方式强制转换

C++提供了四种类型转换方式

const_cast

把常量属性去掉的一个转换.

const  int a =10;
int *p1=(int *)(&a);//C 语言 OK
int *p2=const_cast<int *>(&a);//OK

​​​​​​​double *p3 =(double *) (&a)//c 语言中可以,p3的寻址范围变大,带来风险

double  *p4=const_cast<double *>(&a);//c++在编译阶段就提示错误

只用于去掉常量属性的地方

int b=const_cast<int>(a);//NO ,ERROR const_carst<这里必须是指针或者引用>

static_cast

能够提供编译器认为安全的类型转换

90%使用场景是这个,这个用的是比较多的,几乎能做任何类型转换,但是是要译器认为安全的类型转换

int a=10;
char b=static_cast<int>(a);//OK

int *p=nullptr;
short *b=static_cast<short *>(p) ;  //c++ NO , 两者之间没有任何联系
double *b=static_cast<double *>(p) ;//C++ NO , 两者之间没有任何联系
double *b1=(double *)(p) ;//C语言 OK 

基类和派生类之间可以使用 static_cast 

reinterpret_cast

int *p=nullptr;
short *b=reinterpret_cast<short *>(p) ;  //c++ OK ,
double *b=reinterpret_cast<double *>(p) ;//C++ OK , 
double *b1=(double *)(p) ;//C语言 OK 

类似于C语言的强制类型转换

dynamic_cast

主要用着继承结构中,可以支持RTTI类型识别的上下转换

代码

#include <iostream>
using namespace std;

class  A{

public:
    
    void virtual function(){
		
	cout<<"A function()"<<endl;
		
    }

};

class B : public A{

public:

    void virtual function(){	
	cout<<"B function()"<<endl;
		
   }
	
   void virtual test(){		
	cout<<"B function()"<<endl;
		
   }

};

class C : public A{

public:

    void virtual function(){
		
	cout<<"C function()"<<endl;
		
    }

};

class D : public A{

public:

    void virtual function(){		
	cout<<"D function()"<<endl;		
    }

};

void show(A * pa){
       //dynamic_cast 会检查p指针是否指向的是一个B对象
       //pb->vfptr->vftable ->RTTI信息,如果dynamic_cast转换成功
       //返回 指向B的地址,否则返回nullptr
       B  *pb =dynamic_cast<B *> pa;
       if(pb!=nullptr){
	    pb->test();
       }
       else{
	    pa->function();
       }
}


int main(){
   B b;
   C c;
   D d;
   show(&b);
   show(&c);
   show(&d);
   return 0; 
        
}

到此这篇关于详解C++中四种类型的转换的文章就介绍到这了,更多相关C++类型转换内容请搜索编程网以前的文章或

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯