类型转换是将一种数据类型转换成另一种数据类型。例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型,但是有时候又不会自动帮你转,而且转了之后也有可能发生数据的破坏。
C++提供了一个显示的转换语法。这种的好处时程序员会立即知道强转的类型,看不懂没关系,接下来以例子来说明
静态转换
在父类与子类中,子类可以转为基类,简称上行转换,时安全的,但是父类转成基类时是不安全的。简称下行转换,静态转换只能转基本的数据类型,类和类之间转换不建议,因为不安全。
class Animal{};
class Dog : public Animal{};
Animal* animal01 = NULL;
Dog* dog01 = NULL;
//子类指针转成父类指针,安全
Animal* animal02 = static_cast<Animal*>(dog01);
//父类指针转成子类指针,不安全
Dog* dog02 = static_cast<Dog*>(animal01);
总结:
静态转换写法:
int a;
double b;
a=static_cast<int>b
语法:数据类型 a=static_cast<转换成相同类型> b;
动态转换
动态转换专门用于转类和类之间,不能转换内置的数据类型
int a;
char b;
a=dynamic_cast<int>b //error,不可以这么写
用于类之间的上转型,下行转换会报错
class A
{
};
class B: public A
{
};
void test05()
{
A *p=new A;
B *q=new B;
// q=dynamic_cast<A*>(p);父类转成子类编译器会报错
p=dynamic_cast<B*>(q);//正确
}
常量转换
int与const int之间转换
int *p=NULL;
const int *q=NULL;
p=const_cast<int *>(q);
q=const_cast<const int*>(p);
重新解释转换
用于指针之间的转换,整数和指针之间都可。
int *a;
char *p;
p=reinterpret_cast<char *>§;