zoukankan      html  css  js  c++  java
  • c++之旅:类型的强制转换

    类型强制转换

    在编程的时候我们经常遇到类型的强制转换,C++为此提供了更安全的转换方式,在编程中我们更多的应该采用C++提供的类型转换方式

    基本类型转换

    基本类型转换用的最多,一般将高精度转换为低精度,static_cast关键字用于基本类型转换。

    float a = 1.5;
    int b =  static_cast<int>(a);
    

    上面的列子将浮点型转为整型

    常量类型转换

    常量类型转换一般将指向变量的指针强制让其指向一个常量

    const int  a = 1;
    const int* p1 = &a;
    int* p2 =  const_cast<int*>(&a);
    

    &a的返回值是const int * ,通过**const_cast强制转换为int*类型

    普通类型指针转换

    使用reinterpret_cast可以将可以实现指向普通类型的指针的类型转换

    int a = 0xA0B0C0D0;
    char* c =  reinterpret_cast<char*>(&a);
    for (int i=0; i<4; i++) {
    	printf("%x
    ", *(c+i));
    }
    

    上的示例中强制让一个char*指针指向了int型的变量,并对变量中的内容进行了访问。

    对象指针类型转换

    dynamic_csast运算符用于对象的向上转型或向下转型, 其主要用途是确保可以安全地调用虚函数。dynamic_cast的尖括号中必须为指针或者引用。如果是向下转型,其参数中的指针必须要有虚函数,如果转换失败则为NULL

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Person {
        public:
            Person(){};
            virtual ~Person(){cout << "Person" << endl;}
    };
    
    class Worker: public Person {
        public:
            Worker(){};
            ~Worker(){cout << "Worker" << endl;}
    };
    
    int main(void) {
        Person* person =  dynamic_cast<Person*> (new Worker());
        Worker* worker = dynamic_cast<Worker*>(person);   //传入的person指针对应的类必须要有虚函数
        }
    

    参考

    http://www.cnblogs.com/blueoverflow/p/4712369.html

  • 相关阅读:
    反射、面向对象(基础篇)
    配置文件
    模块补充 、迭代器和 生成器
    模块
    正则表达式
    冒泡排序、递归和简单装饰器
    使用Apache Archiva管理Maven仓库
    AppScan9.0.3.5漏洞扫描记录
    Linux环境下安装Websphere8.5.5
    如何排查网络通讯状况
  • 原文地址:https://www.cnblogs.com/xidongyu/p/6920865.html
Copyright © 2011-2022 走看看