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

    类型转换有 c 风格的,当然还有 c++风格的。 c 风格的转换的格式很简单(TYPE) EXPRESSION,但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合 适的,因为它可以在任意类型之间转换,比如你可以把一个指向const 对象的指针转换 成指向非 const 对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的 指针,这两种转换之间的差别是巨大的,但是传统c 语言风格的类型转换没有区分这 些。还有一个缺点就是,c 风格的转换不容易查找,他由一个括号加上一个标识符组成, 而这样的东西在 c++程序里一大。所以 c++为了克服这些缺点,引进了 4 新的类型转换操作符。

    static_cast 静态类型转换。
    reinterpreter_cast 重新解释类型转换。
    dynamic_cast 子类和父类之间的多态类型转换。
    const_cast 去掉const属性转换。

     

    static_cast

    #include <iostream>
    using namespace std;
    
    int main()
    {
        double d = 3.14;
        int num1 = (int)d;    //C语言的旧式类型转换
        int num2 = d;    //隐式类型转换
        int num3 = static_cast<int> (d);    //静态类型转换
        cout<<"d: "<<d<<", "<<"num1: "<<num1<<", "<<"num2: "<<num2<<", "<<"num3: "<<num3<<endl;
        return 0;
    }
    View Code

    dynamic_cast 子类和父类之间的多态类型转换

    用于多态中的父子类之间的强制转化。

    #include <iostream>
    using namespace std;
    
    class Base
    {
    public:
        virtual void print() = 0;
    };
    
    class A: public Base
    {
    public:
        virtual void print()
        {
            cout<<"I am A"<<endl;
        }
    };
    
    class B: public Base
    {
    public:
        virtual void print()
        {
            cout<<"I am B"<<endl;
        }
    };
    
    int main()
    {
        Base *base = NULL;
        base = new A();    
        base->print();
    
        B *b = dynamic_cast<B *> (base);    //将父类指针转化为子类指针B,但是由于父类指针原来指向的是A,所以转换失败返回空指针
        if(b == NULL)
        {
            cout<<"b is NULL"<<endl;
        }
    
        A *a = dynamic_cast<A *> (base);    //将父类指针转化为子类指针A
        if(a != NULL)
        {
            a->print();
        }
    
        return 0;
    }
    View Code

  • 相关阅读:
    从请假日期列表中取得请假起止日期
    存储过程编写经验和优化措施
    安装IE8不能调试VS2003的解决办法
    javascript驗證若干DropDownList是否有選择
    欢迎光临C/S框架网 www.csframework.com
    C#开发框架钢铁贸易进销存系统演示视频
    基于.Net C/S结构系统开发框架V2.2正式发布!
    C#.NET Winform+WebService开发框架完整版本
    C#.Net C/S快速开发框架V2.2版本介绍
    专注C# .Net C/S结构系统开发框架,C/S框架网
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12976046.html
Copyright © 2011-2022 走看看