虚函数 vs 纯虚函数 vs 静态函数(C++)

🧩 一图看懂:虚函数 vs 纯虚函数

特性虚函数(Virtual)纯虚函数(Pure Virtual)
语法virtual void foo();virtual void foo() = 0;
是否必须实现✅ 必须在类中实现❌ 不在基类实现,派生类必须实现
是否可被重写✅ 可重写(override)✅ 必须被重写(override)
用途支持运行时多态,可选重写强制派生类必须重写,实现接口规范
是否构成抽象类❌ 不一定✅ 是抽象类,不能实例化

✅ 虚函数(virtual

  • 语法virtual void speak();

  • 作用:支持 运行时多态

  • 特性

    • 有默认实现

    • 可以被子类覆盖

    • 必须是非静态成员函数

  • 使用场景:需要在子类中覆盖行为(但不是强制)


✅ 纯虚函数(= 0

  • 语法virtual void speak() = 0;

  • 作用:创建接口函数,强制子类必须实现

  • 特性

    • 没有默认实现

    • 子类 必须重写,否则也是抽象类

    • 所在类称为 抽象类不能被实例化

  • 用途:面向接口编程、设计规范

class Animal {

public:

    virtual void speak() = 0; // 纯虚函数

};


✅ 静态成员函数(static

  • 属于类本身,而不是对象

  • 不能是虚函数,因为没有 this 指针

  • 无法访问非静态成员(因为不依赖对象)

class A {

public:

  static void sayHello(); // 和对象无关

};


🧠 三、抽象类(包含纯虚函数的类)

  • 语法:类中至少一个函数是 virtual void foo() = 0;

  • 特点

    • 不能被实例化

    • 派生类必须实现纯虚函数,才可以实例化

    • 通常作为接口使用,规范子类的行为


📌 四、虚函数工作原理:虚函数表(vtable)

  • 编译器为类创建一张虚函数表

  • 对象内部有个隐藏指针指向这个表(vptr)

  • 当你调用虚函数时,实际会通过 vtable 找到正确的函数地址 ➜ 实现多态

🔑 小结:口诀记忆版

项目口诀
const 指针左定值,右定向,const 修饰不变量
虚函数支持多态,可选覆盖
纯虚函数没有实现,强制子类实现,是接口
抽象类有纯虚函数,不可实例化,只能继承
静态函数类级函数,不能访问对象成员,不能是虚函数
多态原则通过指针/引用访问虚函数,才会发生运行时多态
析构函数如果类有虚函数,析构函数也应为虚函数,防止内存泄漏

详情请见:C++ 虚函数和纯虚函数的区别 | 菜鸟教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年渗透测试面试题总结-拷打题库36(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库36 PHP代码常见入口函数查找 PHP框架路由方法熟悉度 PHP变量覆盖…

STL之vector容器

vector的介绍 1.vector是可变大小数组的容器 2.像数组一样,采用连续的空间存储,也就意味着可以通过下标去访问,但它的大小可以动态改变 3.每次的插入都要开空间吗?开空间就要意味着先开临时空间,然后在拷贝旧的到新…

[学成在线]22-自动部署项目

自动部署 实战流程 下边使用jenkins实现CI/CD的流程。 1、将代码使用Git托管 2、在jenkins创建任务,从Git拉取代码。 3、拉取代码后进行自动构建:测试、打包、部署。 首先将代码打成镜像包上传到docker私服。 自动创建容器、启动容器。 4、当有代…

74HC123的电路应用场景

74HC123的电路应用场景 **1. 引脚功能示例****2. 核心功能****(1)单稳态触发器****(2)双独立通道****(3)灵活触发方式** **3. 工作原理****4. 典型应用场景****(1)定时与延时控制***…

【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其安全性问题日益凸显。DeepSeek作为中国领先的开源AI模型,以低成本和高性能著称,但近期暴露的数据库…

《ESP32音频开发实战:I2S协议解析与WAV音频录制/播放全指南》

前言 在智能硬件和物联网应用中,音频处理能力正成为越来越重要的功能——无论是语音交互、环境音采集,还是音乐播放,都离不开高效的音频数据传输与处理。而I2S(Inter-IC Sound)作为专为音频设计的通信协议&#xff0c…

大数据实时数仓的数据质量监控解决方案

实时数仓不仅仅是传统数据仓库的升级版,它更强调数据的实时性、流动性和高可用性,通过对海量数据的即时处理和分析,为企业提供近乎实时的洞察力。这种能力在金融、零售、制造、互联网等行业中尤为关键,例如,电商平台可以通过实时数仓监控用户行为,动态调整推荐算法;金融…

56认知干货:智能化产业

如果在不久的未来,一座高楼大厦的建设,只需将图纸输入系统,无数台机器人就能精准协作完成任务; 电影节的主角不再是人类,动漫与影视作品将不再需要人类创作; 当播种和收获的工作无人参与,所有过程都能自动化进行; 这将预示着我们将迎来一个智能化社会,在这个社会中,…

使用synchronized关键字同步Java线程

问题 在Java多线程编程中,你需要保护某些数据,防止多个线程同时访问导致数据不一致或程序错误。 解决方案 在需要保护的方法或代码段上使用synchronized关键字。 讨论 synchronized关键字是Java提供的同步机制,用于确保在同一时刻只有一…

MATLAB基于格拉姆角场与2DCNN-BiGRU的轴承故障诊断模型

本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 目录 0 引言 1 格拉姆角场原理 2 2DCNN-BiGRU网络结构 3 应用实例 3.1 数据准备 3.2 格拉姆角场数据提取 3.3 网络模型搭建-重中之重 3.4 …

电气设备器件选型参数---断路器

断路器 一、基本电气参数 额定电压(Ue) 必须≥系统最高工作电压(如380V、660V等)。 注意直流/交流系统的区别,直流断路器需专门设计。 额定电流(In) 根据负载的持续工作电流选择,…

Linux常用命令30——groupadd创建新的用户组

在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,groupadd命令的功能是创建新的用户组。每个用户在创建时都有一个与其同名的基本组,后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入指定的扩展…

微信小程序 自定义组件 标签管理

环境 小程序环境: 微信开发者工具:RC 1.06.2503281 win32-x64 基础运行库:3.8.1 概述 基础功能 标签增删改查:支持添加/删除单个标签、批量删除、重置默认标签 数据展示:通过对话框展示结构化数据并支持复制 动…

wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现

在 WPF 中使用 MVVM Light 框架传递 MouseWheelEventArgs 参数至 CommandParameter,可通过以下步骤实现: ‌1. XAML 中配置事件绑定‌ 在控件上通过 EventToCommand 绑定鼠标滚轮事件,并启用 PassEventArgsToCommand 属性以传递事件参数: <!-- 命名空间声明 --> x…

vmware diffy配置ollama 本机ip无法访问

防火墙直接关闭 本地测试&#xff0c;给它直接关了 ollama配置 vim /etc/systemd/system/ollama.service这是的配置 [Unit] DescriptionOllama Service Afternetwork-online.target[Service] Environment"OLLAMA_HOST0.0.0.0:11434" #Environment"OLLAMA_OR…

React--》掌握react构建拖拽交互的技巧

在这篇文章中将深入探讨如何使用react-dnd&#xff0c;从基础的拖拽操作到更复杂的自定义功能带你一步步走向实现流畅、可控且用户友好的拖拽体验,无论你是刚接触拖拽功能的初学者还是想要精细化拖拽交互的经验开发者&#xff0c;都能从中找到适合自己的灵感和解决方案。 目录 …

数据结构与算法:回溯

回溯 先给出一些leetcode算法题&#xff0c;以后遇见了相关题目再往上增加 主要参考代码随想录 2.1、组合问题 关于去重&#xff1a;两种写法的性能分析 需要注意的是&#xff1a;使用set去重的版本相对于used数组的版本效率都要低很多&#xff0c;大家在leetcode上提交&#x…

iview 分页改变每页条数时请求两次问题

问题 在iview page分页的时候&#xff0c;修改每页条数时&#xff0c;会发出两次请求。 iview 版本是4.0.0 原因 iview 的分页在调用on-page-size-change之前会调用on-Change。默认会先调用on-Change回到第一页&#xff0c;再调用on-page-size-change改变分页显示数量 此时就会…

一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学了.loc[]等几个简单的数据筛选操作&#xff0c;但实际业务需求往 往需要按照一定的条件甚至复杂的组合条件…

【Vue bug】:deep()失效

vue 组件中使用了 element-plus 组件 <template><el-dialog:model-value"visible":title"title":width"width px":before-close"onClose"><div class"container" :style"{height:height px}"&g…