所有虚函数都需要在派生类中实现吗?

2024-03-03

这似乎是一个简单的问题,但我在其他地方找不到答案。

假设我有以下内容:

class Abstract {
public:
    virtual void foo() = 0;
    virtual void bar();
}

class Derived : Abstract {
public:
    virtual void foo();
}

Derived 类不实现 bar() 函数可以吗? 如果不是所有派生类都需要 bar() 函数,但有些派生类需要,该怎么办? 抽象基类的所有虚函数是否都需要在派生类中实现,还是只需要纯虚函数? 谢谢


Derived classes do not have to implement all virtual functions themselves. They only need to implement the pure ones.1 That means the Derived class in the question is correct. It inherits the bar implementation from its ancestor class, Abstract. (This assumes that Abstract::bar is implemented somewhere. The code in the question declares the method, but doesn't define it. You can define it inline as Trenki's answer https://stackoverflow.com/a/8931719/33732 shows, or you can define it separately.)


1 And even then, only if the derived class is going to be instantiated. If a derived class is not instantiated directly, but only exists as a base class of more derived classes, then it's those classes that are responsible for having all their pure virtual methods implemented. The "middle" class in the hierarchy is allowed to leave some pure virtual methods unimplemented, just like the base class. If the "middle" class does implement a pure virtual method, then its descendants will inherit that implementation, so they don't have to re-implement it themselves.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

所有虚函数都需要在派生类中实现吗? 的相关文章

  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli

随机推荐

  • 是什么让 `async/await` 语句在 ES6 中顺序运行与并行运行?

    我已经浏览过该线程wait Promise all 和多个await 之间有什么区别 https stackoverflow com questions 45285129 any difference between await promi
  • Winform通过活动目录进行用户授权

    我遇到一种情况 在我的应用程序中执行任务之前 我使用以下代码来验证 AD 中的用户成员身份 using System Security Principal WindowsIdentity identity WindowsIdentity G
  • 在 ubuntu 中安装最新版本的 git

    我当前的 git 版本 1 7 9 5 我需要至少升级到 git 1 7 10 才能拥有git clone命令才能正常工作 I tried sudo add apt repository ppa git core ppa用于升级 但结果是这
  • 无法对 MobileFirst Console 6.3 使用 HTTPS

    我在 WAS Liberty 8 5 5 4 上使用 MobileFirst 6 3 我可以通过 HTTP 访问控制台 但无法通过 HTTPS 访问控制台 With HTTP With HTTPS 这是server xml 服务器 xml
  • 如何在 Android 中将 Spannable 转换为 AnnotatedString?

    我有一个使用常规 Android 布局的大型项目 我开始在这个项目上使用 compose 但是 我已经拥有一个大型代码库和许多处理 CharSequence 和 Spannable 的实用程序 例如 返回 Spannable 的货币格式化程
  • 如何让 R 读取我的环境变量?

    我在 EC2 Spot 实例上运行 R 我需要 R 来终止实例并在脚本运行后取消 Spot 请求 为此 我已将 请求 ID 设置为环境变量 bashrc我的计划是在脚本准备好后将以下代码调用到 R 中 system ec2 cancel s
  • 抑制 r 可反应基团聚合中的括号

    我正在使用 R 的可反应包来创建按特定变量分组的数据表 这将显示一个折叠的表格 可以展开该表格以显示子行 折叠的行标题旁边有一组括号 指示下面嵌套了多少个子行 是否可以抑制这组括号使其不显示 这会让我的用户感到困惑 这是一个例子 如果我运行
  • Vaadin 14 中列标题中的文本可以换行到网格中的多行吗?

    在上图中 我有一个Grid https vaadin com components vaadin grid在 Vaadin 14 中创建 请注意列标题 未换行的红线 我试图弄清楚是否有可能 并且安全 简单 标准 让列标签换行 例如 就像在
  • Unicode 字符在 IE6 中以不同大小呈现

    在 Web 应用程序中 我必须显示一个特殊的 unicode 字符 称为BLACK DIAMOND U 25C6 see here http www fileformat info info unicode char 25c6 index
  • 解析 webconfig 时 Windows Azure 间歇性身份错误

    这个问题在发布后似乎是随机发生的 该网站将正常工作然后砰的一声 我在解析 webconfig 时遇到此错误 我只是重新发布 它再次运行得很好 发布时 我选中了删除现有文件的框 这样就不会有垃圾 这是一个使用 net 4 5 和与 Yahoo
  • jQuery:如何判断选项卡/窗口何时获得焦点

    是否有一个事件我可以注册 每次用户单击一个选项卡时都会触发该事件 这意味着他们在我页面的选项卡上 单击另一个选项卡 然后返回我的选项卡 EDIT 我所说的选项卡是指浏览器选项卡 而不是 jQueryUI 选项卡 Matijis 在评论中提供
  • ReportLab:阿拉伯字符显示为黑色方块。

    我尝试了几个星期用阿拉伯语创建 pdf 报告 但失败了 我使用 ReportLab 和两个包来构建阿拉伯字符 即 bidi algorithm 和 arabic reshaper 在控制台中 字符组织良好 但在 pdf 中只有黑色方块 im
  • 为什么 Stream.allMatch() 对于空流返回 true?

    我和我的同事遇到了一个错误 这是由于我们假设空流调用allMatch 会回来false if myItems allMatch i gt i isValid do something 当然 假设而不阅读文档是我们的错误 但我不明白的是为什么
  • 从每个助手调用的组件中的产量

    这是我的组件模板的一部分 each displayResults li class if controller template yield else span class displayHelper controller searchPa
  • 为什么启动 2 个以上 AVD 仅在特定条件下有效

    我遇到了我不完全理解的奇怪问题 我尝试从终端启动 2 个以上 AVD 它甚至适用于 4 个 AVD 但仅在特殊条件下有效 我有一个用于 3 个 AVD 的代码 echo no ANDROID HOME tools android creat
  • 开发 ARM 处理器需要什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我熟悉 X86 64 架构和汇编 我想开始开发 ARM 处理器 但与桌面处理器不同的是 我没有真正的
  • 在 Debian Squeeze 上安装 mysql2 gem 时出错

    我在 Debian Squeeze 上安装 mysql2 gem 时遇到了这个 流行 错误 gem install mysql2 Building native extensions This could take a while ERRO
  • VB中如何获取当前可执行文件的完整路径?

    我使用 VB 创建了一个 Windows 应用程序 每当我执行exe 我想获取当前目录exe以编程方式归档 例如 现在 我正在执行exe文件输入d myApp test exe 每当我双击exe我想获取文件的路径exe文件如d myApp
  • 如何从 NSView 或 NSWindow 创建 AXUIElementRef?

    关于 macOS Accessibility API 是否可以创建对应于 NSView 或 NSWindow 的 AXUIElementRef 在 Carbon 时代 似乎有一种方法可以使用 AXUIElementCreateWithHIO
  • 所有虚函数都需要在派生类中实现吗?

    这似乎是一个简单的问题 但我在其他地方找不到答案 假设我有以下内容 class Abstract public virtual void foo 0 virtual void bar class Derived Abstract publi