C++中深入理解dynamic_cast

C++中深入理解dynamic_cast转载:https://blog.csdn.net/gaojing303504/article/details/78860773dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成

大家好,又见面了,我是你们的朋友全栈君。

转载:https://blog.csdn.net/gaojing303504/article/details/78860773

dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,

并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。

前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型至少含有虚函数时(最简单是基类析构函数为虚函数),才能进行这种转换。否则,编译器会报错。

 

用个例子来说明:

1.基类中没有虚函数:

#ifndef _CLASS_H_
#define _CLASS_H_

class Base
{
public:
    Base();
    ~Base();
    void print();
};


class Inherit :public Base
{
public:
    Inherit();
    ~Inherit();

    void show();
};

#endif

 

#include "Class.h"
#include <iostream>
Base::Base()
{

}

Base::~Base()
{

}

void Base::print()
{
    std::cout << "Base funtion" << std::endl;
}

Inherit::Inherit()
{

}

Inherit::~Inherit()
{

}

void Inherit::show()
{
    std::cout << "Inherit funtion" << std::endl;
}
#include "Class.h"

int main()
{
    Base* pbase = new Inherit();

    Inherit* pInherit = dynamic_cast<Inherit*>(pbase);

    return 0;
}

编译器报错:

<span role="heading" aria-level="2">C++中深入理解dynamic_cast

 

 

我们改基类

class Base
{
public:
    Base();
    virtual ~Base();
    void print();
};
#include "Class.h"

int main()
{
    Base* pbase = new Inherit();

    Inherit* pInherit = dynamic_cast<Inherit*>(pbase);

    pInherit->show();//这样动态转换,我们就可以调用派生类的函数了

    return 0;
}

<span role="heading" aria-level="2">C++中深入理解dynamic_cast

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UML图画法_画用例图的步骤

    UML图画法_画用例图的步骤一.用例图的作用用例图主要用来描述“用户、需求、系统功能单元”之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。二.用例图包含的元素 1.参与者(Actor)  表示与您的应用程序或系统进行交互的用户、组织或外部系统。用一个小…

    2025年9月30日
    2
  • 滚动字幕特效大全代码 (转)

    滚动字幕特效大全代码 (转)滚动字幕特效大全代码把代码中的文字改为你的文字就可以了。1.阴影滚动字循环滚动:欢迎来到农夫空间代码:欢迎来到混吧人空间来回移动:欢迎来到农夫空间代码:欢迎来到混吧人空间2.投射阴影滚动字循环滚动:农

    2022年7月3日
    22
  • streamsets数据采集平台介绍

    streamsets数据采集平台介绍Streamsets功能介绍Streamsets功能介绍1数据采集组件简介1.1场景分析1.2组件特点1.3数据接入组件2数据采集管道介绍2.1管道特点2.2数据源,处理器,目标源介绍2.3常用数据源组件2.4常用处理器组件2.5常用目标源组件3任务管道介绍3.1详情的任务管道3.2创建采集任务3.3运行任务详细信息4对数据源组件处理器组件目标源组件统计5数据源详细介…

    2022年6月7日
    51
  • CMOS图像传感器基础知识和参数理解「建议收藏」

    CMOS图像传感器基础知识和参数理解「建议收藏」CMOS图像传感器的工作原理:每一个CMOS像素都包括感光二极管(Photodiode)、浮动式扩散层(Floatingdiffusionlayer)、传输电极门(Transfergate)、起放大作用的MOSFET、起像素选择开关作用的M0SFET.在CMOS的曝光阶段,感光二极管完成光电转换,产生信号电荷,曝光结束后,传输电极门打开,信号电荷被传送到浮动式扩散层,由起放大作用的MOSFET电极门来拾取,电荷信号转换为电压信号。所以这样的CMOS也就完成了光电转换、电荷电压转换、模拟数

    2022年5月17日
    148
  • Exception in thread “main” AxisFault

    Exception in thread “main” AxisFaultAxisFaultfaultCode:{http://xml.apache.org/axis/}HTTPfaultSubcode:faultString:(400)BadRequestfaultActor:faultNode:faultDetail: {}:returncode:400 {http://xml.apache.org

    2025年9月16日
    4
  • pycharm打包后的exe运行不起_pygame打包成exe闪退

    pycharm打包后的exe运行不起_pygame打包成exe闪退在网上找了很多解决方法,有人说是需要添加环境变量,有人说是需要把import的包放到要打包的文件的同一文件夹下,折腾了一晚上一一排查后都不行,最后加了一个python交流群,在大佬的指导下解决了问题,为了感谢python交流群的帮助以及大佬的无私奉献,这里将群号列出帮忙打个广告,群号:786788101,大佬qq号:3124265576,再次感谢。言归正传,解决方法是在报错目录下寻找pyinstaller这个文件夹,如果没有的话找到你的python安装目录,将C:\ProgramFiles(x86)

    2022年8月26日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号