STL学习小计(三)——C++ 类型转换

5 篇文章 0 订阅

三、C++ 类型转换

以 Animal类、Cat类、Test类 来做说明,其中Cat继承于Animal

class Test {};
class Animal {};
class Cat :public Animal {};

3.1 static_cast 静态转换

用于C++内置元素类型的转换,以及具有继承关系的指针或引用

内置元素类型转换:

int a = 97;
char c = static_cast<char>(a);
cout << c << endl; //输出为 a

具有继承关系的指针或引用

Animal *Animal_1 = NULL;//待转换的指针必须被初始化,否则不通过
Cat * Cat_1 = static_cast<Cat *>(Animal_1);//这里是父类转子类,子类也可以转父类

Animal a1;
Animal &Animal_2 = a1;
Cat & Cat_2 = static_cast<Cat &>(Animal_2);
注意:static_cast无法转换以下类型

1、基础数据类型指针:如 int 、char *
2、没有继承关系的对象指针:如 Test
和 Cat *

3.2 dynamic_cast 动态转换

用于具有继承关系的指针或引用之间的转换,且只能由子类转换为父类。在转换时会进行合法性检查,下面这代码就无法通过合法性检查。

//基本无法转换为派生类
Animal *Animal_1 = NULL;
Cat * Cat_1 = dynamic_cast<Cat *>(Animal_1);//此处会报错

正确使用:

//派生类可以退化为基类
Cat * Cat_1 = NULL;
Animal *Animal_1 = dynamic_cast<Animal *>(Cat_1);
注意:dynamic_cast无法转换以下类型

1、基础数据类型:如 int 、char
2、没有继承关系的对象:如 Test和 Cat
3、没有继承关系的对象指针:如 Test * 和 Cat *

3.3 const_cast:const转换

用于针对const的指针、引用或者是对象指针的转换,可以去除元素的const属性,或者加上const属性,注意,const_cast只能转换指针

1、修改基础数据类型的const

int a = 10;
const int &b = a;//b无法被修改
int &c = const_cast<int&>(b);//c可以被修改
c = 20;
cout << a << endl;//输出结果为20

2、修改指针的const

const int *pa = NULL;
int *pb = const_cast<int*>(pa);
注意:const_cast无法转换以下类型

1、不带指针或引用的任何类型,如基础数据类型int,自定义对象Animal等,const_cast只能转换指针

3.4 reinterpret_cast:强制转换

用于没有任何关联之间的转换。这个不讲武德,可以乱转,容易出错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值