在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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类型。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论