CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

高分向求:数据类型转换:static_cast,const_cast等用法

楼主qfeng_zhao(鱼儿鱼儿满天飞)2005-06-21 21:25:19 在 C/C++ / C++ 语言 提问

c++   primer   4.14节提到c++数据类型转换;显示转换符号的一般形势为:  
                      cast-name<type>   (expression);  
  这里cast-name是static_cast,const_cast,dynamic_cast,reinterpret_cast之一。  
   
  问题:1。这四个分别有什么作用,区别是什么,都分别用在什么场合??  
              2。这种显示类型转换和c下的有什么区别?? 问题点数:50、回复次数:2Top

1 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-21 21:40:28 得分 40

*     C++提供了四种新的类型强制:      
     
  static_cast      
  const_cast      
  reinterpret_cast      
  dynamic_cast      
     
  1)staic_cast静态强制;      
     
  不能在无关的指针之间进行static类型强制      
  class     CAnimal      
  {      
                        //...      
  public:      
                        CAnimal(){}      
  };      
     
  class     CGiraffe:public     CAnimal      
  {      
                        //...      
  public:      
                        CGiraffe(){}      
  };      
     
  int     main(void)      
  {      
                        CAnimal     an;      
                        CGiraffe     jean;      
                             
                        an     =     static_cast<CAnimal>(jean);//将对象jean强制成CAnimal类型      
                        return     0;      
  }      
     
  2、const_cast类型强制      
     
  const_cast类型强制将一个const变量变成一个非const的等价形式      
  int     main()      
  {      
                        const     int     j     =     99;      
                        int     *     k;      
                             
                        k     =     const_cast<int     *>(&j);//解除const      
                        return     0;      
  }      
     
  3、reinterpret_cast运算符      
     
  reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上;      
  int     main()      
  {      
                        int     j     =     10;      
                        int     *     ptr     =     &j;      
                        char     *     cptr;      
     
                        cptr     =     reinterpret_cast<char     *>(ptr);//将int指针类型转变为char的指针类型      
     
                        return     0;      
  }      
     
  4、dynamic_cast运算符      
     
  dynamic_cast的主要目的是:      
     
  1)它返回派生类对象的地址;      
  2)它测试基类指针是否指向下一尖括号<>中所指定类型的对象      
     
  dynamic_cast是一个运行时类型信息,dynamic_cast运算符将指向派生对象的基类部分的基类指针转变为指向派生对象的派生类指针,dynamic_cast必须严格地指定与派生对象相同的类,或者它返回NULL指针;      
  class     CAnimal      
  {      
                        //...      
  };      
  class     CGiraffe:public     CAnimal      
  {      
                        //...      
  };      
  class     CGoat:public     CAnimal      
  {      
                        //...      
  };      
     
  int     main()      
  {      
                        CGiraffe     gene;      
                        CAnimal     *     aptr     =     &gene;      
                        CGiraffe     *     ptr1,*     ptr2;      
                             
                        ptr1     =     dynamic_cast<CGiraffe     *>(aptr);      
                        ptr2     =     dynamic_cast<CGoat     *>(aptr);                                                 //return     NULL      
                             
                        return     0;      
  }                              
     
  ---------------------------------------------------------------      
  以上纯属以前帖子的copy。Top

2 楼foochow(无聊,灌水......)回复于 2005-06-21 22:10:54 得分 10

上面的差不多说的很清楚了:PTop

相关问题

  • Const 的用法
  • const 用法?
  • const用法
  • const用法?
  • 关于const_cast的用法,高手进来看看!
  • 关于const_cast的用法,谁能举个例子
  • 关于CONST的用法??
  • 简单问题!const用法
  • 关于static的用法
  • 请问static_cast,dynamic_cast和const_cast有什么区别?

关键词

  • c++
  • 指针
  • 转换
  • canimal
  • cast
  • cgiraffe
  • 类型
  • 运算符
  • 派生
  • dynamic

得分解答快速导航

  • 帖主:qfeng_zhao
  • zhousqy
  • foochow

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo