深入理解C++强制类型转换

C++四种强制转换类型


static_cast

reinterpret_cast

const_cast

dynamic_cast


static_cast


静态转换,用于非多态类型,任何标准的转换都可以用它,不能用于两个互不相干的类型


可以理解为能进行隐式转换类型的使用它


代码示例:


int i=1;
double d=static_cast<double>(i);	//正确
int* p=&i;
p=static_cast<int> (i);			//int和int*不相关


reinterpret_cast


不相关类型之间的转换


代码示例:

int i=1;
int* p=&i;
p=reinterpret_cast<int>(i);

const_cast


去常性的强制类型转换,将const变为非const类型


代码示例:


const int a=2;
int* p=const_cast<int*>(&a);
*p=a;

dynamic_cast *****最重要的一个


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


分类:


上转型:子类对象指针传给父类指针或引用

下转型:父类对象指针传给子类指针或引用


使用场景:


(1)只能用于含有虚函数的类

(2)先检查能否转化,能转化进行转化,不能转化返回0

(3)一般来说,父类不能转化成功,子类可以转化成功,从对象模型的角度我们可以看出,由于父类缺少子类特有的部分,所以指过去的时候会产生越界访问。


代码示例:


class B
{
       virtual void fun()
       {}
}

class D:public B
{}
B* pa=NULL;
D* pd=dynamic_cast<B*>(pa);	



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值