CPP虚函数详解与实例

news/2024/12/21 11:34:43/文章来源:https://www.cnblogs.com/wevolf/p/18620584

CPP虚函数详解与实例

在 CMU_15445 的Project3 中大量使用了虚函数,抽象类的方法 主要在 Expression(表达式) 以及 Executor(Plan_Node的执行) 中, 在完成 Part1 的时候仅关注了功能的实现, 还没有完全搞清楚为什么要使用虚函数以及抽象类, 以及虚函数背后的原理, 本次补充一下.

虚函数的定义

大多人看到虚函数的第一眼往往是,

程序运行时可以通过父类的指针或引用调用子类的函数.
但是, 这只是虚函数的工作方式, 也不是虚函数的目的, 也不是工作原理, 所以看到这句话大部分人还是一头雾水, 也没有继续看下去的意愿.
所以我们从头开始讲, 并且我将会引入最近在做的 CMU_15445 中的表达式的例子, 用于更详细的解释.

虚函数的目的

我们知道 OOP 的三大特性是, 封装, 继承与多态, 其中虚函数是实现多态的方式, 虚函数的目的也就是实现多态.

多态 (polymorphism)

我引用一段英文描述, 我觉得很好的解释了什么是多态:

Polymorphism is a popular concept in object-oriented programming (OOP), referring to the idea that an entity in code such as a variable, function or object can have more than one form. The word polymorphism is derived from Greek and means "having multiple forms." Apart from computer programming, the idea of polymorphism occurs in other real-world areas, including biology, chemistry and drug development.
多态的概念就不再赘述了, 在 CMU_15445 的 Project3 中, 我们用表达式来解释多态就是, BUSTUB 中支持 SQL 语法的多种表达式, 我们将这些表达式的属性以及功能进行抽象, 得到一个基类, 也就是 abstract_expression, 并且抽象出一些方法为 Evaluate, EvaluateJoin 等方法. 每一个具体的表达式都将继承这个抽象表达式, 然后重写这些表达式中的方法, 来实现自己的特定功能, 这就是多态. 简单粗暴的理解就是, 表达式表现出多种不同的状态, 这是一种设计思想.

用虚函数来实现多态

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

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

相关文章

static修饰成员的特点及static修饰成员变量内存图解-java se进阶 day01

1.static介绍 static是静态的意思,它可以用于修饰成员变量和成员方法2.static的特点1.被static修饰了的成员变量,可以被类中的所有对象所共享 虽然stu02没有给school赋值,但是我们用stu02调用时依旧成立,并且打印了南昌交通学院,因为school被共享了,恰好stu01又为其赋值了…

IIS运行遇到问题

1:打开网站时出现的错误提示2:下载对应的.net core Runtime后正常,如下图所示

【最短路】

【最短路算法系统概述】

【Python逆向】深入Pyd逆向

pyd 文件是编译生成的 Python 扩展模块,是类似 so、dll 的一种 Python 文件。 pyd 文件无法像 pyc文件那样恢复源码,只能通过逆向手段去恢复逻辑。 一、理解pyd文件 1.1 编译pyd 自己编译一个 pyd 保留符号来看。 test.py: import base64 key = [ord(i) for i in "key&…

React之Json编辑器

我们先看下效果,这个白色是不是非常不错?没有太多复杂的功能,就是当一个简洁显示json并且进行编辑的功能接下来是代码部分 import AceEditor from react-ace; import { Button, Modal } from antd; import ./styles.css;// Import ace editor themes and modes import ace-b…

2024 ASP.NET Core 开发者路线图

2024 ASP.NET Core 开发者路线图

OCR实践—PaddleOCR

有个项目需求,对拍摄的问卷图片,进行自动得分统计【得分是在相应的分数下面打对号】,输出到excel文件 原始问卷文件见下图,真实的图片因使用手机拍摄的图片,存在一定的畸变,技术调研 传统方法 传统方法,通过线检测 先对 表格进行矫正【仿射变换】,然后二次线检测 划分出…

Google发布了它所称的“推理”AI模型

Google发布了它所称的“推理”AI模型——但这还处于实验阶段,根据我们简短的测试,显然仍有改进空间。 这个新模型名为Gemini 2.0 Flash Thinking Experimental(名字有点长,确实),可以在Google的AI原型平台AI Studio中使用。模型卡片描述它是“最适合多模态理解、推理和编…

【Python GUI 编程】tkinter :Ttk 组合框 Combobox

在本文中,将介绍如何创建一个 tkinter Combobox 组合框小部件,该小部件允许用户从一组值中选择一个值。 Combobox 组合框小部件是新增的 Ttk 主题小部件,是 Entry 文本框和 Listbox 列表框的组合。除了允许在一组值中选择一个值外,它还允许输入自定义值。 创建组合框 要创建…

【Python GUI 编程】tkinter:Ttk 选项卡 Notebook

在本文中,将介绍如何使用 Tkinter Notebook 小部件创建选项卡。 Notebook 是由 Tkinter Ttk 模块引入的强大小部件。允许开发者创建包含多个选项卡的界面,每个选项卡可以包含不同的内容。 创建 Notebook 小部件,请使用如下构造函数: notebook = ttk.Notebook(master,**kw)添…

在虚拟机里执行protoc报非法指令( Illegal instruction)

问题 在x86虚拟机里编译perfetto的时候遇到执行protoc报非法指令,但是在host上编译的时候并没有这样的问题 原因 虽然虚拟机和宿主机都是同一个指令集架构,但是CPU在一些特殊指令上的支持还是有区别的,如果Host可以,但是虚拟机上不行,可能就是虚拟机CPU不支持某些特性,导…

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐 文章正文 It was a few years ago. A friend had sent me a restaurant gift card for Christmas and I had picked a sunny Sunday afternoon to use it. It felt good taking my two grown sons and daughter to…