C/C++知识点之C语言强制类型转换实现方法
小标 2018-08-27 来源 : 阅读 1557 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言强制类型转换实现方法,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言强制类型转换实现方法,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

1.隐式类型转换

eg:顺序表中在某个位置插入一个数

size_t pos;

for(int i=n-1; i>=pos; i--)

{}

注:i>=pos中,会发生隐式类型的转换,如果pos=0时,导致死循环。

应该为:i>=(int)pos将pos强转为int-----强制类型转换

2.显示的强制类型转换

eg: i>=(int)pos缺点:不规范

C++强制类型转换

1.static_cast //相关类型的转换,相当于C语言的隐式转换

static_cast用于非多态类型的转换(静态转换),任意标准转换都可以用它,但它不能用于两个不相关类型转换

\

2.reinterpret_cast //不相关类型的转化,相当于C语言中的强制类型的转换

reinterpret_cast操作符用于将一种类型转换为另一种不同的类型

3.const_cast //删除数据的常性

const_cast最常用的用途就是删除变量的const属性,方便赋值 \

4.dynamic_cast ----多态类型的转化(前提:必须有继承关系)

dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用(动态转换)

向上转型:子类对象指针->父类指针/引用(不需要转换)(切片/切割)

向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)

典型例题:

区分pa是指向父类还是子类

#include<iostream>
using namespace std;
 
class A
{
public:
    virtual void f()
    {}
};
 
class B:public A
{};
 
void fun(A* pa)
{
    //要求区分Pa是指向子类还是父类
    B* pb = dynamic_cast <b*> (pa);
    if(pb)
    {
        cout<<"pa指向子类"<<endl; else="" pre=""><img alt="\" src="https://www.2cto.com/uploadfile/Collfiles/20180416/20180416091930859.png" style="width: 496px; height: 138px;"><p>注:1.dynamic_cast只能用于含有虚函数的类</p><p> 2.dynamic_cast会先检查是否能转换成功,能转换成功则转换,不能则返回0</p><p><strong>总结:</strong>static_cast和reinterpret_cast运算要么直接被编译器拒绝进行转换,要么就一定会得到相应的目标类型的值。 而dynamic_cast却会进行判别,确定源指针所指的内容,是否真的合适被目标指针接受。如果是否定的,那么dynamic_cast则会返回null。<span style="font-family: Arial, Verdana, sans-serif;">           </span></p></endl;></b*></iostream>    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved