虚函数与纯虚函数

nnDetection实战:手把手教你用Python在自家电脑上跑通第一个肺结节检测模型 本文详细介绍了如何使用nnDetection框架在普通电脑上实现肺结节检测模型的搭建与运行。从环境配置、数据预处理到模型训练与推理,手把手教你完成医学图像检测的全流程,特别适合初学者入门医学AI领域。 阅读详情

虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。 
——摘自MSDN
一、引入原因:
  1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。
  2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
  为 了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。
  二、纯虚函数实质:
  类中含有纯虚函数则它的VTABLE表不完全,有一个空位,所以,不能生成对象(编译器绝对不允许有调用一个不存在函数的可能)。在它的派生类中,除非重载这个函数,否则,此派生类的VTABLE表亦不完整,亦不能生成对象,即它也成为一个纯虚基类。
  三、 虚函数与构造、析构函数:
  1、构造函数本身不能是虚拟函数;并且虚机制在构造函数中不起作用(在构造函数中的虚拟函数只会调用它的本地版本)。
  想一想,在基类构造函数中使用虚机制,则可能会调用到子类,此时子类尚未生成,有何后果!?。
  2、析构函数本身常常要求是虚拟函数;但虚机制在析构函数中不起作用。
  若类中使用了虚拟函数,析构函数一定要是虚拟函数,比如使用虚拟机制调用delete,没有虚拟的析构函数,怎能保证delete的是你希望delete的对象。
  虚机制也不能在析构函数中生效,因为可能会引起调用已经被delete掉的类的虚拟函数的问题。
  四、对象切片:
  向上映射(子类被映射到父类)的时候,会发生子类的VTABLE 完全变成父类的VTABLE的情况。这就是对象切片。
  原因:向上映射的时候,接口会变窄,而编译器绝对不允许有调用一个不存在函数的可能,所以,子类中新派生的虚拟函数的入口在VTABLE中会被强行“切”掉,从而出现上述情况。
  五、虚拟函数使用的缺点
  优点讲了一大堆,现在谈一下缺点,虚函数最主要的缺点是执行效率较低,看一看虚拟函数引发的多态性的实现过程,你就能体会到其中的原因。
SCS 43. 利用Scissor算法从单细胞数据中挖掘临床表型关联的细胞亚群 本文详细介绍了Scissor算法在单细胞转录组数据分析中的应用,该算法能够精准挖掘与临床表型关联的细胞亚群。通过建立单细胞RNA测序数据与临床预测模型的直接关联,Scissor避免了传统聚类方法的局限性,为疾病机制研究和个性化医疗提供了新工具。文章还涵盖了数据预处理、模型选择、结果验证等实战技巧。 阅读详情

相关推荐

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2400

(纯)虚函数意义

一、引入原因:  1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。  2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。  为 了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态

jenus1的专栏 1417

DC竞赛 国能日新功率预测题 rank21 解决方案(适合新手)

DataCastle国能日新光伏功率预测 数据异常处 本题在测试集中提供了时间、辐照度、风速、风向、温度、压强、湿度、实发辐照度8个特征,以及标签**实际功率**。 而在训练集中只有前七个特征,无实发辐照度。 策略 在观察了数据之后,我们确定实发辐照度是一个强力特征,于是我们采取了stacking的策略: 1. 第一次训练以实发辐照度为标签,预测 测试集的实发辐照度 2....

yyhhlancelot的博客 7298

第十三周阅读程序(3)

问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:zwj.cpp *作 者:张伟晶 *完成日期:2016年5月21日 *版 本 号:v1.0 * *问题描述:阅读程序,写出运行结果 *输入描述: *程序输出: */ #include using namespace std; clas

味精加盐不加糖 1294

YOLOv8改进——引入可变形卷积DCNv3

本文只讲解在YOLOv8的代码中添加DCNv3的操作流程, 具体的原理参见上述的链接~是pytorch实现的版本,只要基础的pytorch环境安装正确就不会出错。是C++实现版本,必须先在上一步编译成功,或者安装好了轮子,否则会报错。但是在实际的训练过程中,C++版本的运行速度更快,推荐使用C++版本。(具体怎么修改,都可以自己决定,然后通过实验看看效果如何)文件夹,该文件夹下的内容就是实现DCNv3算子的核心代码。中,下图中的列表里添加。

zyw2002的博客 3万+

Cadence HDL原理图库避坑指南:从Excel导入引脚到解决‘V- V+’报错(附FPGA实例)

本文详细介绍了Cadence HDL原理图库的高效构建与排错方法,重点讲解如何从Excel智能导入引脚数据并优化FPGA封装设计。通过数据预处理、智能导入和深度排错三个关键阶段,帮助工程师避免常见错误如‘V- V+’报错,提升设计效率和准确性。

weixin_28739079的博客 236

C++:抽象基类和纯虚函数的理解

抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。       ⑴抽象类的定义:       称带有纯虚函数的类为抽象类。       ⑵抽象类的作用:       抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的通

铁匠Smith先生的专栏 1万+

NCCL 核心集体通信操作深度解析:从原理到优化实践

操作逻辑:若 N 个 GPU 各持有一段数据(大小为 S),通信后每个 GPU 会持有所有 N 段数据(总大小为 N×S)。典型场景:多卡推理结果聚合、模型并行中间结果同步。操作逻辑:N 个 GPU 各持有数据,通过归约(求和、取平均等)运算后,所有 GPU 获得相同结果。典型场景:数据并行训练的梯度聚合(如 SGD 优化器)。操作逻辑:N 个 GPU 各持有 N 份数据分片,通信后每个 GPU 获得所有 GPU 的对应分片。典型场景。

jundao1997的专栏 679

虚函数与多态

虚函数: C++中的虚函数的作用主要是实现了多态的机制。 虚函数是一种在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。虚函数的特点是,只要定义一个基类的指针,就可以指向派生类的对象。 注:无虚函数时,遵循以下规则:C++规定,定义为基类的指针,也能作指向派生类的指针使用,并可以用这个指向派生类对象的指针访问继承来的基类成员;但不能用它访问派生类的成员。 使用虚函数实现...

邵光亮的博客 1283

Xilinx FPGA资源解析与使用系列——Transceiver(六)关键时钟梳理之TXOUTCLK和RXOUTCLK

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA资源解析与使用系列——Transceiver(六)transceiver内部关键时钟梳理之TXOUTCLK和RXOUTCLK前言TXOUTCLKRXOUTCLK 前言 前面我们已经研读了 transceiver的参考时钟 和复位的相关内容。 但是随着内容的深入,越来越多的信号出现在我的面前。 例如 TXOUTCLK、TXUSERCLK、TXUSERCLK2 RXOUTCLK、RXUSERCLK、RXUSERCLK2

gzy0506的博客 8090

智慧加油站小程序数据库设计文档

【代码】智慧加油站小程序数据库设计文档。

低代码布道师的博客 1404

什么是虚函数,什么是纯虚函数?为什么引入虚函数和纯虚函数?

虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是:(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。 纯虚函数一般没有代码实现部分,如virtual void print() = 0; 而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。virtual void print(){ printf("This is virtual function\n...

qq_41786318的博客 6892

Oracle EBS和华为MetaERP在会计科目(COA)设计上的观察非常精准。这两种设计确实代表了两种截然不同的系统架构思想,我们可以从设计哲学、优劣对比和演进关系三个方面进行深入分析。

OracleEBS与华为MetaERP的COA设计对比分析 OracleEBS采用弹性域架构,通过固定段数字符串实现多维度核算,强调稳定性和全球统一标准,但修改成本高、扩展性受限。华为MetaERP采用解耦架构,将核算单元、自然科目和核算维度分离,支持动态扩展和灵活调整,更适合业务快速变化的企业。 OracleEBS优势在于强一致性和成熟稳定,劣势是灵活性差;华为MetaERP优势是极致灵活性,劣势是对管理要求高。两者代表了不同时代的企业软件设计理念:OracleEBS适合标准化需求,MetaERP则面向快

金牌架构师 432

虚函数与纯虚函数的区别与联系

文章目录一、虚函数1. 定义二、纯虚函数1.定义三、区别与联系 一、虚函数 1. 定义 在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为: virtual 函数返回类型 函数名(参数表) {函数体}; 实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专...

江南蜡笔小新 4100

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

虚函数与纯虚函数的区别

虚函数(impure virtual)   C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。   子类可以重写父类的虚函数实现子类的特殊化。   如下就是一个父类中的虚函数:class A { public: virtual void ss() { cout<<"我是基类的虚函数"<<endl; } };纯虚函

乐于分享,共同成长 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[C++]纯虚函数与虚函数

虚函数的概念,虚函数的特点,虚函数的语法,虚函数的使用场景,纯虚函数的概念,纯虚函数的特点,纯虚函数的语法,纯虚函数的使用场景,override关键字,虚函数和纯虚函数的区别,纯虚函数的子类实现

2302_80281315的博客 1459

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

虚函数与纯虚函数(详细讲解)

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 1、简介 假设我们有下面的类层次: class A { public: virtual void foo() ...

HQYD 2391

C++——虚函数与纯虚函数

一、概述虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:    virtual void Eat(){……}; 

shineHoo的专栏 922

【C++:虚函数与纯虚函数】

虚函数是基类中用关键字 virtual 修饰的成员函数,目的是允许派生类对其进行重写,并通过基类指针或引用调用派生类的重写版本。虚函数的本质是为了解决编译时的函数绑定(静态绑定)问题,实现运行时的动态绑定。纯虚函数是没有函数体的虚函数,声明时在其后加 = 0。包含至少一个纯虚函数的类称为抽象类,不能实例化,只能作为基类使用。虚函数实现了运行时的多态性,是C++中面向对象编程的重要特性。纯虚函数用于定义抽象接口,是接口类和模块化设计的核心。

计算机领域博客,与时俱进的思想与技术。 818

C++ - 虚函数与纯虚函数

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 虚函数声明如下: virtual ReturnType FunctionName (Parameter) 虚函数必须实现,那怕是空实现;如果不实现,编译器将报错。它的作用是为了能让其在子类里可以被重写以达到多态,当然也可以不重写。 纯虚函数...

了解➔熟悉➔掌握➔精通 3万+

纯虚函数与虚函数的区别

以下内容来自:http://hi.baidu.com/jink20080509/item/64a741f6a6af8bde42c36acb 本人仅用于学习参考 C++虚函数和纯虚函数区别 作者总结: 1.纯虚函数声明如下: virtual ReturnType FunctionName(Parameter)=0; 纯虚函数一定没有定义,纯虚函数用来规范派生类的行为,即接口。包含纯虚函

嵌入式学习笔记 1195

C++ 虚函数与纯虚函数

虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。 纯虚函数一般没有代码实现部分,如 virtual void print() = 0; 而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。 virtual void print() { printf("This is virtual function\n"); } (2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。 如果子类想要实例化,纯虚

GT黑喵的博客 948

c++中的虚函数与纯虚函数

文章目录虚函数纯虚函数 虚函数 由于在类的继承派生过程中,可以在派生类中定义和基类中的相同函数,但由于有时需要声明基类指针或引用去指向派生类对象,由于赋值兼容原则对于派生类中派生定义的成员是不可见的,调用同名函数的时候只能默认调用基类中的定义,而虚函数机制则可以解决这个问题,将同名函数在基类中定义为虚函数后,就可以通过基类指针或引用在调用函数时根据所指对象类型的不同而自动选择调用不同类中的函数,实现运行时的动态绑定,也是一种多态性的体现 定义格式: virtual return_type <

来,骗!来,偷袭! 695

C++中虚函数与纯虚函数(以及函数重写/重载,隐藏,多态等

虚函数与纯虚函数 定义 类中声明前带有virtual关键字的函数称为虚函数: class A { virtual void example(); } 类中申明格式如下的函数称为纯虚函数: class A { virtual void example() = 0; } 即在函数声明中含有virtual和= 0两个关键字。 区别 纯虚函数的特点: 只有声明,没有实现/定义 含有纯虚函数的类称为抽象类,抽象类不能被实例化 抽象类的派生类如果想成为具体的类(能够被实例化),则必须重写纯虚函数。

weixin_41694059的博客 1万+
上一篇: C++中的vector使用范例
下一篇: C++堆与栈的区别
Dark_Passion
博客等级 码龄17年 14粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值