【为什么】什么是纯虚函数?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
相关文章
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3模型升级、字节GR-3机器人、TRAE SOLO、JoyAgent OxyGent京东智能体框架、智谱Z.ai炫酷PPT制作
AI Compass前沿速览:Qwen3模型升级、字节GR-3机器人、TRAE SOLO、JoyAgent OxyGent京东智能体框架、智谱Z.ai炫酷PPT制作
AI Compass前沿速览:Qwen3模型升级、字节GR-3机器人、TRAE SOLO、JoyAgent OxyGent京东智能体框架、智谱Z.ai炫酷PPT制作
|
7月前
|
人工智能 自然语言处理 IDE
Trae 接入 Claude 3.7:AI 编程工具界的“卷王”,完全免费使用!
Trae 是一款完全免费的AI编程工具,现已接入 Claude 3.7 模型,提供代码生成、调试等强大功能,支持多模态输入和上下文理解,用户可享受24小时高速服务,无需担心付费限制。Trae 支持多平台,安装简便,适合开发者快速上手。
2769 1
Trae 接入 Claude 3.7:AI 编程工具界的“卷王”,完全免费使用!
详解CAN总线:CAN总线报文格式—错误帧
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
|
7天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
6天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
325 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
18天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1331 8
|
5天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。