1、类型转换

  static_cast<>():静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换的地方,均可以使用static_cast<>()进行类型转换;

  reinterpret_cast<>():强制类型转换;编译器重新解释;

  dynamic_cast<Cat *>(base):父类对象===>子类对象,向下转型,一般用在继承中;

  const_cast<>():const char *---> char *,把常量属性去掉;

(1)、代码如下:

#include
using 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)的类型转换代码:

#include
using namespace std;void printBuf(const char *p){    //p[1] = '1';    char *p1 = NULL;    p1 = const_cast
(p);//const char *---> char *,把常量属性去掉;    p1[0] = 'Z';    cout<

<

运行结果: