【为什么】什么是纯虚函数?C++之父谈

简介: 【为什么】什么是纯虚函数?C++之父谈

 此文为C++之父撰写,本篇为翻译

纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如:

class Base {
                public:
                        void f1();                         // 不是虚函数
                        virtual void f2();         // 是虚函数,但不是纯虚函数
                        virtual void f3() = 0;  // 纯虚函数
                };
                Base b; // error: pure virtual f3 not overridden

image.gif

在此,Base 是抽象类(因为它有一个纯虚函数),所以不能直接用它来定义对象:Base(很显然)是用来做基类的。例如:

class Derived : public Base {
                        // 没有定义 f1:没关系
                        // 没有定义 f2:没关系,继承了 Base::f2
                        void f3();
                };
                Derived d; // ok: Derived::f3 覆盖了 Base::f3

image.gif

抽象类是定义接口的非常好的工具。事实上,一个只有纯虚函数的类通常被称为接口。

当然你也可以定义纯虚函数:

Base::f3() { /* ... */ }

image.gif

这样做往往意义不大(虽然这样做可为派生类提供一些简单的公共代码),而且在派生类中仍然需要覆盖 Base::f3()。

如果你没有在派生类中覆盖纯虚函数,那该派生类也是抽象类:

class D2 : public Base {
                        // 没有定义 f1:没关系
                        // 没有定义 f2:没关系,继承了 Base::f2
                        // 没有定义 f3:没关系,但 D2 因此也是抽象类
                };
                D2 d; // 错误:没有覆盖纯虚函数 Base::f3
相关文章
|
机器学习/深度学习 自然语言处理 数据处理
论文《Attention is All You Need》
论文《Attention is All You Need》
2130 1
|
8月前
|
人工智能 弹性计算 API
喂饭教程!手把手教你使用阿里云一键部署OpenClaw
OpenClaw是开源可自托管的AI执行助理,阿里云提供官方一键镜像,零代码、无命令行,2核2G服务器10分钟快速部署,支持百炼大模型与多平台接入,新手也能轻松拥有专属24小时AI智能体!
2485 8
|
5月前
|
人工智能 自然语言处理 网络虚拟化
自动化天塌了?AI 替你画 Simulink!Agent——MCP 配置踩坑指南(附真实环境实测)
本文介绍在Windows下配置Simulink-MCP,使Cursor等AI Agent通过Model Context Protocol直接操作MATLAB/Simulink模型。支持加载、编辑、仿真等14个结构化工具,用自然语言即可生成/修改模型。需MATLAB R2024+、Python 3.10/3.11,并注意Engine与MCP版本兼容性。(239字)
|
10月前
|
机器学习/深度学习 人工智能 搜索推荐
构建AI智能体:六十、特征工程行业实践录:金融、电商、医疗的智能化转型
本文通过金融风控、电商推荐和医疗诊断三个行业案例,系统阐述了特征工程的实践价值与技术方法。在金融领域,通过构建稳定性评分等特征,将贷款审批坏账率从8.2%显著降低;电商行业通过实时兴趣向量等特征,使推荐点击率提升3倍;医疗领域则利用病变严重度评分等特征,将筛查效率提升5倍。研究揭示了特征工程作为连接业务需求与技术实现的关键桥梁,其核心在于将原始数据转化为机器可理解的业务语言。
677 3
|
10月前
|
人工智能 运维 安全
GPT-5.2 Codex来了:能独立跑7+小时的AI程序员,老金手把手教你玩转
OpenAI发布GPT-5.2 Codex,支持异步自主编程,7小时持续任务不断线。采用上下文压缩技术,胜任复杂重构与安全审计。对比Claude Code的同步交互,Codex更像远程员工,适合甩手任务。Plus用户可免费体验,API性价比高,配合本地工具高效开发。
GPT-5.2 Codex来了:能独立跑7+小时的AI程序员,老金手把手教你玩转
|
数据采集 前端开发 JavaScript
产科专科电子病历系统基于Java开发,实现与HIS、LIS、PACS及区域妇幼信息平台的三级互联互通
产科专科电子病历系统基于Java开发,采用前后端分离架构(Vue+ElementUI前端,MySQL数据库),实现与HIS、LIS、PACS及区域妇幼信息平台的三级互联互通。系统涵盖患者全息视图、快速智能录入、检验检查模块、智能高危评估、异常值提醒及自我监测等功能,支持孕期时间轴和综合评估,自动归集数据并完成高危评分,助力产科数据标准化、结构化,以及临床保健工作的全程智能化管理。
537 1
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
16855 1
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
27824 3

热门文章

最新文章