【C++】四种类型的转换

C++四种类型的转换

包括这四种:const_cast , static_cast , dynamic_cast , reinterpret_cast

先来说下C语言中的类型转换,非常的暴力,就是耍流氓:

float a = 12.23;
int b = (int)a;

下面我写的都是最基础的,简单的,下面这篇文章写的很详细,我还刚学这东西,就只是写一下我自己的理解:

c++ 四种强制类型转换介绍_ydar95的博客-CSDN博客_c++指针类型强转c++ 四种强制类型转换介绍const_cast , static_cast , dynamic_cast , reinterpret_cast1.https://blog.csdn.net/ydar95/article/details/69822540

static_cast

int main()
{
	float a = 12.23;
	int b = static_cast<int>(a);  //尖括号中的就是想转的类型
	//等同于int b = (int)a;
	cout << b << endl;
}

基本数据类型的转换,就靠static_cast来进行转换!!!

const_cast

int main()
{
	const int a = 10;
	int* p = const_cast<int*>(&a);   //const_cast在这块的作用就是去常性
	//这行代码等于int* p = (int*)&a;  这玩意是C语言中的强转
}

 const_cast去常性!!!

reinterpret_cast

int main()
{
	int a = 10;
	char* pq = reinterpret_cast<char*>(&a);
    //和C语言中强转char* p = (cahr*)(&a);
}

整型a,为什么可以将int的地址赋值给char* p呢,拿reinterpret_cast对a的地址进行重新解释,赋值给char* p,相当于C语言中的char* p = (cahr*)(&a);

dynamic_cast

class Object
{
public:
	virtual void fun() {}
};

class Base:public Object
{
public:
	virtual void fun() {}
};

int main()
{
	Object* op = NULL;
	Base* bp = NULL;

	Object obj;  //基类对象
	Base base;  //派生类对象

	op = dynamic_cast<Object*> (&base); //从派生类指针转换到基类指针
    //相当于:op = &base;
    //需要注意的是,我们不能将基类指针转换到父类指针
} 

dynamic_cast将派生类base转换成Object*赋值给基类指针(派生类指针转换到基类指针),但是不可以将基类指针转换到父类指针,会报错(无法将Object* 类型转换到Base*)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值