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

  • 相关阅读:
    CodeForces 656B
    时间限制
    哈哈
    &1的用法
    codeforces 385 c
    hdu 1176 免费馅饼
    poj 1114 完全背包 dp
    poj 1115 Lifting the Stone 计算多边形的中心
    jar包解压
    重定向
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12976046.html
Copyright © 2011-2022 走看看