在C语言中强制类型转换均是:(new-type) expression,像:int *pa=(int*)pb;
在C++中提供了四种强制类型转换:
1.reinterpret_cast:
1.主要用于指针的转换,将一个指针转换为其他类型的指针,即使是两个无关的类,
2.将指针转换为基本数据类型,就是把地址转化为基本数据类型的值,
3.但不能用于基本数据类型之间的转换,reinterpret_cast转换的对象必须是指针。
2.static_cast:
1.完成基本数据类型之间的转换,
2.不能用于基本数据类型的指针类型之间的转换,
3.对于指针只能用于父类和子类的指针转换。
3.dynamic_cast:
1.用于多态,
2.两个类之间需要有继承关系,如果想把父类转换为子类指针,父类需要有虚函数接口,
3.如果是两个无关类,则需要虚函数接口。
4.const_cast:
1.去掉const属性,但在C++,即使去掉强制去掉const属性,依然无法修改常量的值。
总结:
在类指针之间进行类型转换需要考虑到内存大小问题,成员函数是放在代码区的,当成员函数没有访问到类的成员数据时,是不会发生问题,但有些转换:像父类转换为子类指针downcast(向下转换),然后访问子类的成员数据,会访问到不是我们想要的结果。子类的空间比父类的大,当是upcast(向上转换),即把子类指针转换为父类指针这是没有问题的。