c++ dynamic_cast与static_cast使用方法示例 c++ dynamic_cast与static_cast使用方法示例

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

c++ dynamic_cast与static_cast使用方法示例 c++ dynamic_cast与static_cast使用方法示例

  2021-03-20 我要评论
想了解c++ dynamic_cast与static_cast使用方法示例的相关内容吗,在本文为您仔细讲解c++ dynamic_cast与static_cast使用方法示例的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:dynamic_cast,static_cast,下面大家一起来学习吧。

首先dynamic_cast:

复制代码 代码如下:

#include <iostream>
using namespace std;
class A{
    public:
        virtual ~A(){} //使用dynamic_cast时,必要!
};
class B:public A{
    public:
        B(){
            m_b=12;
        }
        void foo(){
            cout<<"B: "<<m_b<<endl;
        }
    private:
        int m_b;
};
int main()
{   
    A *a=new B();
    B *b=dynamic_cast<B*>(a);
    b->foo();
    delete a;
    return 0;
}

上面没有virtual ~A(){},编译时会报错:(source type is not polymorphic)。

static_cast:

复制代码 代码如下:

#include <iostream>
using namespace std;
class A{
    public:
        A():m_a(32){}
        void foo(){
            cout<<"A: "<<m_a<<endl;
        }
        void setA(int a){
            m_a=a;
        }
    private:
        int m_a;
};
class B:public A{
    public:
        B(){
            m_b=12;
            setA(13);
        }
        void foo(){
            cout<<"B: "<<m_b<<endl;
        }
    private:
        int m_b;
};
int main()
{   
    A *a=new B();
    B *b=static_cast<B*>(a);
    A *aa=static_cast<A*>(b);
    b->foo();
    aa->foo();
    delete a;
    return 0;
}

打印a、b、aa地址,可知地址一样。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们