c++中的静态和动态类型转换

静态和动态类型转换区别就是动态类型转换在下行转换时进行类型检查,是安全的,动态不支持基础类型转换

#include<iostream>
using namespace std;
class parent
{
public:
	virtual void Print_parent()
	{
		cout << "I am parent" << endl;
	}

};


class son:public parent
{
public:
	void Print_parent()
	{
		cout << "I am son" << endl;
	}

};

void test_static()
{
	//普通类型转换
	int a = 10;
	double b = static_cast<double>(a);

	//上行转换和下行转换
	parent* par = NULL;
	son* so = NULL;
	parent* par2 = static_cast<parent*>(so);//子类转父类,安全
	son* so2 = static_cast<son*>(par);//父类转子类,静态转换没有进行安全类型检查,不安全
}

void test_dynamic()
{
	//普通类型转换
	int a = 10;
	//double b = dynamic_cast<double>(a);


	//上行转换和下行转换
	parent* par = NULL;
	son* so = NULL;
	parent* par2 = dynamic_cast<parent*>(so);//子类转父类,安全(上)
	//在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全(下)
	//son* so2 = dynamic_cast<son*>(par);//父类转子类,不安全,动态类型会进行安全检查,编译不通过

	son* s = new son;
	parent* p = dynamic_cast<parent*>(s);
}

int main()
{
	//test_static();
	test_dynamic();

	system("pause");

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值