zoukankan      html  css  js  c++  java
  • c++ 类型转换

    1、数据类型转换(static_cast)

    //数据类型转换
    printf("%d ", static_cast<int>(10.2));

    2、指针类型转换(reinterpret_cast)
    //指针类型转换
      int *pint = new int(1);
      char *pch = reinterpret_cast<char *>(pint);

    3、涉及到const的指针类型转换(const_cast)
      const int num[5] = { 1,2,3,4,5 };
      const int *p = num;
      int *pint = const_cast<int *>(p);

    4、子类转化为父类(dynamic_cast)

    class man
    {
    public:
        int name;
        //加上virtual关键字,可以使得父类用子类初始化后可以调用子类的函数
        virtual void run()
        {
            cout << "man is running" << endl;
        }
    };
    
    class son :public man
    {
    public:
        void run()
        {
            cout << "son is running" << endl;
        }
    };
    
    void main()
    {
        /*man man1;
        son son1;
        man *p = &man1;
        p->run();
        p = &son1;
        p->run();*/
        man *pman = new man;
        son *pson = new son;
        //子类指针转换为父类指针,但是还是调用子类的函数
        man *pfu = dynamic_cast<man *>(pson);
        pfu->run();
        system("pause");
    }
        volatile关键字
      表示该变量易变,每次在访问该关键字修饰的变量时都要读内存,不对其进行优化。
      mutable关键字
      类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改这个变量。
      explicit关键字
      修饰构造函数,通常用作 构造函数静止隐式转换。
      四种类型转换
      1. const_cast
      去掉类型的const或volatile属性。
        const int a=10;
        int &b=const_case<int&>(a);
     
      2. static_cast
      静态类型转换,用于类型间强制转换。用于:
      (1)基类和子类转换,子类指针转父类是安全的,父类转子类不安全。
      (2)基本数据类型转换。
      (3)空指针转换成目标类型指针。
      (4)转换为void类型
        int n=1;
        double  d=static_cast<double>(n);
        int *pn=&n;
        double *d=static_cast<double*>(&n);
        void *p = static_case<void*>(pn);
      
      3.dynamic_cast
      动态类型转换,运行时类型安全检查(转换失败返回NULL)
      (1)安全基类和子类转换,基类转子类会失败。
      (2)必须有虚函数。
      (3)相同基类不同子类间转换,结果为NULL。
     
       4.reinterpret_cast
      重新解释类型,没有进行二进制转换。
      一般用在函数指针类型之间转换。
  • 相关阅读:
    active learning
    PLS-00201: identifier 'SYS.DBMS_CUBE_EXP' must be declared
    浅谈防火墙
    yum安装nginx错误处理
    简单的SQL注入
    mysql之查询语句练习题
    Linux权限和用户管理
    Linux文件及目录查找命令~~续集
    linux文件及目录查找命令
    linux文件管理练习题
  • 原文地址:https://www.cnblogs.com/lovebay/p/11558472.html
Copyright © 2011-2022 走看看