虚函数与纯虚函数的定义,作用,区别

c++虚函数详解 某基类中声明为virtual并在一个或多个派生类中重新定义的成员函数叫做虚函数。用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”。实现动态联编,在函数运行阶段动态的选择合适的成员函数。 在定义了虚函数后,可实现在派生类中对虚函数进行重写,从而实现统一的接口和不同的执行过程。... 阅读详情

虚函数与纯虚函数:

(1)什么是虚函数?

虚函数:动态绑定的基础,是非静态的成员函数。被 virtual 关键字修饰的成员函数称为虚函数:在类成员方法的声明(不是定义)语句前加“virtual”, 如 virtual void func()。

虚函数的作用:是实现多态性,即通过基类访问派生类的函数。

virtual 只用来说明类声明中的原型,不能用在函数实现时。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。本质:不是重载声明而是覆盖

调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。

其实完全可以不用父类类型的指针,直接创建子类对象来调用子类的普通函数也是可以的啊,为什么非要使用虚函数呢?

虽然这样说,但是实际开发过程中不是这样的,当我们使用一些类库、框架的时候,这些类库、框架是事先就写好的。我们在使用的时候不能直接修改类库的源码,我们只能派生类库中的类来覆盖一些成员函数以实现我们的功能,但这些成员函数有的是由框架调用的。这种情况下,用虚函数是很好的办法。

(2)什么是纯虚函数?

在虚函数后面添加 =0 ,虚函数就成为纯虚函数:如 virtual void func()=0;。

在很多情况下,基类生成对象很不合理。为了解决这个问题,引入了纯虚函数的概念,将函数定义为纯虚函数,派生类中必须重写实现纯虚函数。对于实现了纯虚函数的子类,该纯虚函数在子类中就变成了虚函数。

(3)虚函数和纯虚函数有什么区别?

  • 虚函数定义形式:成员函数前添加 virtual 关键字,纯虚函数在虚函数后添加 =0 ;
  • 含有纯虚函数的类,称为抽象类;只含有虚函数的类,不能称为抽象类。
  • 虚函数既可以直接使用,也可以被子类重载实现后,以多态的形式调用;而纯虚函数必须被子类重载实现,才能以多态的形式调用,因为纯虚函数在基类中只有声明。
  • 无论虚函数还是纯虚函数,定义中都不能有 static 关键字。因为 static 关键字修饰的内容在编译前就要确定,而虚函数、纯虚函数是在运行时动态绑定的。
C++中,虚函数的作用详解 我个人认为虚函数的作用有两个: 增加安全性;提醒子类去做该做的事情。 提高效率;不是指程序执行效率,而是编码效率。 阅读详情

相关推荐

【C++学习笔记】 纯虚函数详解,绝不纯属虚构!

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 一、定义 纯虚函数也可以叫抽象函数,一般来说它只有函数名、参数和返回值类型,不需要函数体。 纯虚函数是一种特殊的虚函数,它的一般格式如下(C++格式): class <类名> { virtual.

Hsuesh的博客 3163

虚函数,纯虚函数区别

1、虚函数的作用是“运行时多态”和重载,父类中提供虚函数的实现,为子类提供默认的函数实现;子类可以重写父类的虚函数实现子类的特殊化; 2、纯虚函数:包含纯虚函数的类称为抽象类。抽象类不可以new出对象,只有实现了这个纯虚函数的子类才能new出对象。纯虚函数更像是只提供申明,不实现,是对子类的约束,是接口继承。纯虚函数也是一种运行时多态。 3、普通函数:静态编译的,没有运行时多态。 注意:纯虚...

zymofffice的博客 5610

C++ 抽象类、虚函数、纯虚函数、接口

C++ 抽象类 一、纯虚函数定义      纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0” 二、引入原因: 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 ...

cookie909的博客 1323

虚函数详解

c++虚函数

qq_25427995的博客 7736

C++中虚函数的原理和作用

本文档详细介绍了C++中虚函数的原理以及在何场景下要用到虚函数。

VS2019 +osg3.6.5+ earth3.2+qt5.14.2+osgQt 编译教程

用vs新建工程,稍后会在写一篇博客上分享四、结语至此,所有的编译就均已完成。

king_ink的博客 1134

虚函数和纯虚函数的区别

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

Hackbuteer1的专栏 20万+

用VINS-Fusion跑通EuRoC数据集:Ubuntu22.04+ROS2环境下的保姆级评测指南

本文详细介绍了在Ubuntu22.04和ROS2 Humble环境下使用VINS-Fusion处理EuRoC数据集的完整流程。从环境配置、数据集转换到参数调优和性能评估,提供了一套全面的多传感器融合分析方案,帮助开发者在无人机精准定位场景中实现高效部署与优化。

weixin_29212867的博客 517

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

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

weixin_41694059的博客 1万+

【Qt-4】QT基于qhttp-server搭建http服务器

QT搭建http服务器

WXG1011的博客 5713

099、多摄融合与变焦系统:广角到长焦的无缝切换算法

本文分享了多摄融合与变焦系统开发中的实战经验和关键挑战。作者通过一个旗舰机项目案例,揭示了广角到长焦切换时画面抖动问题的根源——融合算法误将视差当作运动补偿,并提出"视差冻结窗口"的解决方案。文章总结了三大多摄融合难点:物理视差处理、亮度差异补偿和切换时机把控,详细阐述了分层架构设计、融合权重计算等核心技术。同时强调了产线校准的重要性,并给出五项实用建议:允许边缘鬼影保留、参数场景化配置、加强产线检测、完善调试接口,以及合理运用AI技术。全文展现了多摄融合技术在时间、空间和感知维度上的复杂平衡艺术。

sundong_81的博客 48

c++面试_说说纯虚函数与虚函数的区别与作用

【代码】c++面试_说说纯虚函数与虚函数的区别与作用。

游戏全栈,技术合作 360

十五、SAP-物料需求计划(MRP)

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1094

纯虚函数和虚函数的区别

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

Linear_Luo的专栏 780

【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)

文章目录声明前言一、漏洞原理简述二、漏洞代码深层解析三、实验步骤四、漏洞补丁总结 声明 本篇文章仅用于技术研究与技术学习,切勿用于非授权下攻击行为,切记! 前言 Windows7 存在 MS17-010 永恒之蓝(远程溢出漏洞) ,该漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码 一、漏洞原理简述 MS17-010漏洞出现在Windows SMB v1中的内核态函数 srv!SrvOs2FeaListToNt 在处理FEA(File Ex

李同學AI安全 9627

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

C++ 虚函数与纯虚函数 浅析

在虚函数与纯虚函数的学习中,要求理解虚函数与纯虚函数的定义,了解虚函数与纯虚函数在实例化上的差异,掌握两者在实现上的必要性,熟悉纯虚函数在子类与孙类的函数类型。本文即针对上述问题展开阐述。

稚枭天卓 1264

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 891

C++ 虚函数和纯虚函数的区别

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

DawnChing 300

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++类中 虚函数与纯虚函数的区别和作用

在C++的面试题中经常会被问到虚函数与纯虚函数的区别和作用,在此做个总结。 主要是借鉴了这篇博客:http://blog.youkuaiyun.com/hackbuteer1/article/details/7558868 虚函数与纯虚函数在声明的形式上的区别; virtual void funtion1()=0 //纯虚函数 virtual void funtion2() //虚函数 1 2 定义一...

weixin_41082581的博客 237

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

虚函数与纯虚函数

定义一个函数为虚函数,不代表函数为不被实现的函数。 虚函数是为了允许用基类的指针来调用子类的这个函数。虚函数用来实现C++的多态性(polymorphism)。 当基类的指针指向派生类实例时,可以用基类指针调用派生类中的成员函数。如果基类指针指向不同的派生类,则该指针可以调用同一个函数实现不同的逻辑。这种机制可以让基类指针具有多种形态。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 纯虚函数是在基类中声明...

Sarah_212的博客 830

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++中 虚函数 纯虚函数 与多态

一、定义.     纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加"=0" virtual void funtion1()=0 二、引入原因: 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出

domwin300208的专栏 669

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

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

来,骗!来,偷袭! 695
上一篇: malloc与new区别
下一篇: (C++笔记)第二十四节课:运算符重载与模板概念
xaf21
博客等级 码龄5年 20粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值