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

 更新时间:2013年11月15日 14:55:24   作者:  
本文用示例讲解了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地址,可知地址一样。

相关文章

  • 深入解析C++11 lambda表达式/包装器/线程库

    深入解析C++11 lambda表达式/包装器/线程库

    这篇文章主要介绍了C++11 lambda表达式/包装器/线程库的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C++树之遍历二叉树实例详解

    C++树之遍历二叉树实例详解

    这篇文章主要给大家介绍了关于C++树之遍历二叉树的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C语言实现简单航班管理系统

    C语言实现简单航班管理系统

    这篇文章主要为大家详细介绍了C语言实现简单航班管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 基于Qt和Opencv实现二维码解析

    基于Qt和Opencv实现二维码解析

    这篇文章主要为大家详细介绍了如何利用 Qt 和 OpenCV 实现一个可从视频和图片中检测二维码的软件,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • C++11/14 线程调用类对象和线程传参的方法

    C++11/14 线程调用类对象和线程传参的方法

    这篇文章主要介绍了C++11/14 线程调用类对象和线程传参的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • C语言调用go生成的动态库的踩坑过程解析

    C语言调用go生成的动态库的踩坑过程解析

    这篇文章主要为大家介绍了C语言调用go生成的动态库的踩坑过程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C/C++实现获取硬盘序列号的示例代码

    C/C++实现获取硬盘序列号的示例代码

    获取硬盘的序列号、型号和固件版本号,此类功能通常用于做硬盘绑定或硬件验证操作,下面我们就来学习一下如何使用C/C++实现获取硬盘序列号吧
    2023-11-11
  • VSCode保存代码自动格式化无效的解决方法

    VSCode保存代码自动格式化无效的解决方法

    最近一直使用vscode,VSCode中各种配置后,自动保存格式化仍然无效,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-08-08
  • 基于Matlab实现离散系统分岔图的绘制

    基于Matlab实现离散系统分岔图的绘制

    这篇文章主要介绍了如何利用Matlab实现离散分岔图的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
    2022-04-04
  • C语言快速排序与二分查找算法示例

    C语言快速排序与二分查找算法示例

    这篇文章主要介绍了C语言快速排序与二分查找算法,涉及C语言随机数生成、快速排序及二分查找等算法相关实现技巧,需要的朋友可以参考下
    2018-01-01

最新评论