• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中的四种显式类型转换之static_cast

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在C++中提供了类型向上转换和向下转换的方法。关于向上转换和向下转换区别如下:


1、从派生类转换到基类,在继承图中来说是向上的,所以一般称为向上类型转换。向上类型转换总是安全的,因为从更专门的类型转换到更一般的类型。可能出现的唯一的事情就是失去成员函数。向上转换可以通过虚函数来实现。下面的程序就是一个向上转换的例子:

class base{

base(){}

virtual ~base(){}

};

class derived:public base{

derived(){}

virtual ~derived(){}

};

void main()

{

base *Base=new derived;//这里就是将derived的指针类型向上转换成base的指针类型

}

2、static_cast<type>(content)  该运算吧content中的数据转换成type类型的数据,但是没有运行时类型检查来保证其转换的安全性。

     其实在c中常用的类型转换例如   

char i; 

int j=0xff33ff44;

i=(char)j;

这样已经能把数据转换成想要的类型,但是在c++中为什么要用一种新的表示方式呢?

因为在c++中的static_cast<type>(content)可以更好的控制转换的过程,他能更清楚地表示想要做什么,更容易让别人理解。

static_cast可以实现基本数据类型的转化,例如: int i=static_cast<int>(9.876);

但是如果用它来进行类之间的转换,可要求转换成的类和被转换的类之间有一定的继承关系,但并不要求包含虚函数。例如:

class A{

};

class B:public A{

};

class C{

};

void main()

{

A*a=new A;

B*b=null;

C*c=null;

int i=188;

int *p=&i;

void *voidP=&i;


b=static_cast<B*>(a);//正确,这里B类继承了A类,两者之间有一定的关系

c=static_cast<C*>(c);//编译时将发生错误,因为A类和C类之间没有任何的关联

float*b=static_cast<float*>(p);//这里错误,不能见int*转换成float*

float*k=static_cast<float*>(voidP);//正确,这里可以将void*类型转换成float*类型

}


其实static_cast转换和传统的转换是类似的只要将static_cast和圆括号去掉,再将尖括号改成圆括号就变成了传统的显示转换方式。

它主要有如下几种用法:
(1)用于类层次结构中基类和子类之间指针或引用的转换。
  进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
  进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
(2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员保证。
(3)把空指针转换成目标类型的空指针。
(4)把任何类型的表达式转换成void类型。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap