1、类型转换
static_cast<>():静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换的地方,均可以使用static_cast<>()进行类型转换;
reinterpret_cast<>():强制类型转换;编译器重新解释;
dynamic_cast<Cat *>(base):父类对象===>子类对象,向下转型,一般用在继承中;
const_cast<>():const char *---> char *,把常量属性去掉;
(1)、代码如下:
#includeusing namespace std;class Animal{ public: virtual void cry() = 0;};class Dog : public Animal{ public: virtual void cry(){ cout<<"汪王"< <<"看家"< <<"喵喵"< <<"抓老鼠"< cry(); //1、有继承 2、有虚函数的重写 3、有父类指针指向子类对象; ===>发生多态 //dynamic_cast能识别子类对象,运行时类型识别; Dog *pDog = dynamic_cast (base); //是自己类型的,将转换成功,否则返回为NULL; if(pDog){ pDog->doHome(); //让狗做自己特有的工作; } Cat *pCat = dynamic_cast (base);//父类对象===>子类对象,向下转型; if(pCat){ pCat->doThing(); //让猫做自己特有的工作; }}int main(void){ Dog d1; Cat c1; playObj(&d1); playObj(&c1); //Animal *base = NULL; //base = static_cast (&d1); return 0;}/*int main(void){ double pi = 3.14; int num2 = static_cast (pi); //静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换的地方,均可以使用static_cast<>()进行类型转换; char *p1 = "abcdef"; int *p2 = NULL; //p2 = static_cast (p1); //使用static_cast,编译器编译时,会做类型检查,若有错误,提示错误; p2 = reinterpret_cast (p1);// 强制类型转换;编译器重新解释 cout< < < <
运行结果:
(2)、针对const_cast<char *>(p)的类型转换代码:
#includeusing namespace std;void printBuf(const char *p){ //p[1] = '1'; char *p1 = NULL; p1 = const_cast (p);//const char *---> char *,把常量属性去掉; p1[0] = 'Z'; cout< <
运行结果: