C++显示类型转换(static_cast,const_cast,interpret_cast,dynamic_cast)

  在我们进行c++编程时候,有时候我们希望显示地将对象强制转换成另外一种类型。

  c++为我们提供了4中强制类型转换:static_castdynamic_castconst_castreinterpret_cast。

  下面我们就来谈谈这4中强制类型转换的用法。

1. static_cast

  在c++ Primer一书中对static_cast是这样描述的:任何具有明确定义的类型转换,只有不包括底层const,都可以使用static_cast

  它主要有如下几种用法:

  ①用于类层次结构中基类和派生类之间指针或引用的转换。

     进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;

     进行下行转换(把基类指针或引用转换成派生类表示)是,由于没有没有动态类型检查,所以是不安全的。

  ②用于基本的数据类型的转换。

  ③把空指针转换成目标类型的空指针。

  ④把任何类型的表达式转换成void类型。

  下面是static_cast使用的一些例子:

#include <iostream>

using namespace std;

class CBase
{
public:
	CBase() {}
	virtual ~CBase() {}
};

class CDerived : public CBase
{
};

typedef struct rectangle
{
	unsigned int uiLength;
	unsigned int uiWide;
}RECTANGLE;

void Func(void *pParam)
{
	//当对象有之间有"一定的关系"也可用static_cast转换
	//例如:我们可以使用static_cast找回存在于void*指针中的值
	RECTANGLE *pRectangle = static_cast<RECTANGLE *>(pParam);

	cout << "Area = " << pRectangle->uiLength * pRectangle->uiWide << endl;

	return;
}

int main(void)
{
	//①用于类层次结构中基类和派生类之间指针或引用的转换。
	CBase *pBase = new CBase();
	CDerived *pDerived = new CDerived();
	//进行上行转换,即派生类的指针或引用转换成基类
	CDerived *pDerivedTmp = static_cast<CDerived *>(pBase);	//安全
	//进行下行转换,即基类指针或引用
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值