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

 

C++中的类型转换

#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 子类和父类之间的多态类型转换

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

C++中的类型转换

#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

 

 

原文链接: https://www.cnblogs.com/xumaomao/p/12976046.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++中的类型转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351055

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:39
下一篇 2023年3月2日 上午6:40

相关推荐