强制类型转换

9人阅读 评论(0) 收藏 举报
分类:
C语言强制类型转换

1.隐式类型转换
     eg:顺序表中在某个位置插入一个数
           size_t pos;
             for(int i=n-1; i>=pos; i--)
             {}
      注:i>=pos中,会发生隐式类型的转换,如果pos=0时,导致死循环。
       应该为:i>=(int)pos将pos强转为int-----强制类型转换
2.显示的强制类型转换
     eg:  i>=(int)pos   缺点:不规范       
 
C++强制类型转换
 
    1.static_cast   //相关类型的转换,相当于C语言的隐式转换 
        static_cast用于非多态类型的转换(静态转换),任意标准转换都可以用它,但它不能用于两个不相关类型转换
    2.reinterpret_cast  //不相关类型的转化,相当于C语言中的强制类型的转换

        reinterpret_cast 操作符用于将一种类型转换为另一种不同的类型

   
   3.const_cast   //删除数据的常性   
         const_cast最常用的用途就是删除变量的const属性,方便赋值
4.dynamic_cast  ----多态类型的转化 (前提:必须有继承关系)
      dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用(动态转换)  
       向上转型:子类对象指针->父类指针/引用(不需要转换)(切片/切割)   
       向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)

典型例题:
        区分pa是指向父类还是子类
#include<iostream>
using namespace std;

class A
{
public:
	virtual void f()
	{}
};

class B:public A
{};

void fun(A* pa)
{
	//要求区分Pa是指向子类还是父类
	B* pb = dynamic_cast <B*> (pa);
	if(pb)
	{
		cout<<"pa指向子类"<<endl;
	}
	else
	{
		cout<<"pa指向父类"<<endl;
	}
}

注:1.dynamic_cast只能用于含有虚函数的类 

         2.dynamic_cast会先检查是否能转换成功,能转换成功则转换,不能则返回0  

总结:static_cast和reinterpret_cast运算要么直接被编译器拒绝进行转换,要么就一定会得到相应的目标类型的值。 而dynamic_cast却会进行判别,确定源指针所指的内容,是否真的合适被目标指针接受。如果是否定的,那么dynamic_cast则会返回null。

查看评论

FLEX强制类型转换

  • 2010年03月31日 00:47
  • 1KB
  • 下载

C++4种强制类型转换

  • 2009年04月25日 14:52
  • 39KB
  • 下载

java 强制类型转换示例

  • 2010年06月21日 16:27
  • 59KB
  • 下载

四种强制类型转换的总结

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a   C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 ...
  • hgl868
  • hgl868
  • 2015-06-24 11:01:41
  • 2219

重载()运算符和重载强制类型转换

// 研究了半宿,终于弄清楚了 // 写了这段测试代码可以很好的演示效果 class CConvert { public: CConvert(){m_nValue = 10;} ...
  • feihe027
  • feihe027
  • 2014-06-09 23:07:26
  • 1255

强制类型转换使用时的注意事项

作为一个软件工程师,在我们平时的学习和工作中会经常使用到强制 类型转换的操作,但是有些操作我们不得不需要注意一下; 例如: 我们在一个64位的操作系统中; unsigned l...
  • u014100559
  • u014100559
  • 2016-01-28 23:51:28
  • 799

C++11四种强制类型转换

1、  static_cast: 功能:完成编译器认可的隐式类型转换。 格式type1 a; type2 b = staic_cast(a);将type1的类型转化为type2的类型; 使用范...
  • sumup
  • sumup
  • 2017-10-01 17:50:05
  • 170

关于强制类型转换的小问题

记得有此去面试,是在Linux下使用文本编译器写程序。关于泛型的那点一直有问题。我当时是想把定义一个存储int类型的泛型变量,List list = new ArrayList();但是编译就出错,有...
  • sinat_16428007
  • sinat_16428007
  • 2016-02-28 11:37:17
  • 399

强制类型转换什么时候用到

一.向下类型转换(子类转父类)。 当子类有的方法,父类中没有的时候,这时候就需要将父类转换为子类,这样就可以使用子类里有父类里没有的方法了。 例如:Fruit类里有grow()方法,Apple类继...
  • wdy3110411073
  • wdy3110411073
  • 2016-01-10 22:13:14
  • 439

C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换

  • 2009年05月26日 13:02
  • 2KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 1893
    积分: 298
    排名: 25万+
    文章分类