将基类函数标记为虚拟函数和最终函数有什么意义吗? [复制]

2023-11-22

In various 解释C++11 的final关键字,我看到这样的例子。

class base
{
public:
    virtual void f() final;
};

class derived : public base
{
public:
    virtual void f();    // Illegal due to base::f() declared final.
};

这实际上有用吗final?为什么要在基类中声明一个虚函数(意味着它可以在派生类中有效地重写),然后立即将其标记为final(否定这个暗示)?有什么用处virtual void f() final?

我可以看到标记的价值derived::f()最终而不是base::f()。在这种情况下,base::f()大概有一个基于设计的充分理由f()应该是虚拟的,并且derived::f()单独有一个很好的基于设计的理由,说明为什么任何进一步的派生类都不应重写其实现。

如果您不想多态地覆盖该函数,为什么不直接省略 virtual 关键字呢?当然,派生类仍可能以非多态方式重写该函数。目的是virtual void f() final因此在基类中base::f()绝对不可以任何方式重写——无论是作为虚拟函数还是非虚拟函数?如果是这样,那么我们必须添加virtual在这种情况下关键字仅用于启用final。我认为将非虚拟函数标记为最终函数也应该是合法的。

Why use virtual void f() final对于源自基类的函数,当意义virtual和感觉final似乎矛盾?


将基类函数标记为虚拟函数和最终函数有什么意义吗?

是的,至少暂时如此。

我发现自己处于一个相对较大且不熟悉的现有 C++ 源代码库中。大部分代码是在 C++11 之前编写的。我发现我想确保基类中虚拟函数的所有重写都标记为override。困难的部分是找到所有这些覆盖。

我在基类中标记了虚函数final,编译器很快就向我展示了每个重写的声明位置。然后很容易按照我想要的方式装饰覆盖,并删除final来自基类中的虚拟。

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

将基类函数标记为虚拟函数和最终函数有什么意义吗? [复制] 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • password_hash、password_verify、MySQL的误解?

    我似乎无法让这个测试显示数据库中的哈希密码 它可以很好地显示表单中的密码 尝试进行此测试以找出为什么我无法将表单中的密码与数据库中存储的密码进行比较来验证密码 我读到了一些关于转义哈希中的 符号的内容 但我不确定如何使用我正在使用的代码来做
  • locale什么时候影响R的正则表达式?

    R 有几个用于正则表达式的特殊的与语言环境无关的字符类 From regex alnum 表示 0 9A Za z 后者除外 取决于区域设置和字符编码 而 前者独立于区域设置和字符集 我想知道何时会出现特定于区域设置的问题 我根据中的信息尝
  • Powerpoint:手动设置幻灯片名称

    Context C 中的 PowerPoint 幻灯片有一个属性 Slide Name 通常包含任意字符串值 在我的 C 应用程序中 我想使用此属性来识别幻灯片 幻灯片顺序不可靠 问题 如何在 PowerPoint 应用程序中手动设置 Sl
  • 免费网络监控器

    我在集成两种产品时遇到问题 其中一种是我的 但它们似乎没有说话 所以我想确保他们的沟通正确 我查看了网络监视器并发现了 TCP Spy 这有效 但一次只显示对话的一侧 它必须在本地运行 我理想情况下希望同时看到双方 但你不能运行 TCP S
  • 在 Ruby 中实现同步屏障

    我正在尝试 复制 CUDA 的行为 synchtreads Ruby 中的函数 具体来说 我有一组N需要执行某些代码的线程 然后在继续执行其余业务之前 所有线程都在执行中点互相等待 例如 x 0 a Thread new do x 1 sy
  • wait_fences:未能收到回复:10004003 - 什么?

    一直收到这个奇怪的错误 事情是这样的 在下面的方法中 我会出现一个警报视图 获取 U N 和 PW 然后尝试启动另一个方法 方法 postTweet 没有被激活 我刚刚在控制台中收到此错误 wait fences failed to rec
  • 如何在不使用 as 的情况下确保 TypeScript string|string[] 是字符串?

    edit由于时间的推移 这个问题从对此的评论和回答看来 它已经失去了有效性 尽管最初出现 但它并不是这个的骗局 我有一个翻译功能 通过以下签名工作 getI18n id string string 我注意到输入以下内容有点乏味 const
  • 从文本视图中删除粗体而不更改其他属性

    I use setTypeface设置文本粗体 或斜体 或其他字体属性 TextView tv findViewById R id label tv setTypeface null Typeface BOLD 如何仅删除粗体属性 而不更改
  • 在 Java 中将列表复制回数组以及反之亦然的时间复杂度是多少?

    我想知道时间复杂度是多少 in bigO n 的符号 ArrayList to Array转换 ArrayList assetTradingList new ArrayList assetTradingList add Stocks tra
  • 这里如何推断泛型类型?

    public static void main String args Map
  • SQL允许相同的列名

    当我在 SQL Server 中运行此查询时 SELECT custid AAA companyname AAA FROM Sales Customers WHERE country USA 运行良好 但现在结果集有重复的列名 AAA 为什
  • 如何查询bigquery表中存储为字符串的json?

    如何查询bigquery表中存储为字符串的json 我有一个表 其中列中的值 subscriptions 看起来像这样 data application fee percent null canceled at null created 1
  • Jupyter 笔记本中未显示散景

    我无法在 Jupyter Notebook 中绘制最基本的散景图 我进行了搜索 发现这是一年多前报告的问题 但此后就没有了 这对其他人来说仍然是一个问题吗 from bokeh io import output notebook show
  • 当大小是变量而不是常量时如何创建数组?

    我有一个接收变量 int 的方法 该变量构成了一个数组大小 请不要向我提供向量 因此 我需要在我的方法中初始化一个 const int 来初始化特定大小的数组 问题 我该怎么做 void foo int variable int int a
  • 获取要传播的附加属性继承

    我无法获取附加属性值以在视觉层次结构中将树从父项传播到子项 设置如下 我有一个实例化 Viewport3D 的自定义面板 然后 面板处理添加和删除的子项 为每个子项创建和添加继承的 Visual3D 类 我正在尝试声明一个名为 Attach
  • 如何从 ASP.NET Identity Core 2.0 中删除与角色相关的表

    根据在其他地方读到的建议 角色是声明的子集 我正在寻找一种干净的方法来要求 ASP NET Identity 中的 EF Core 实现不要在 VS 的 ASP NET Identity Core 2 0 模板中创建与角色相关的表2017
  • 在移动设备上使用 mootool 拖动

    有没有办法让 mootools 类 Drag 在 Safari 移动设备上工作 请不要将我链接到其他框架 这是我使 Mootools Drag 支持触摸事件的解决方案 此方法不需要我编辑 mootools more 文件 因为我使用了 Cl
  • 在什么情况下需要具体指定模板的参数“类型”?

    Function declaration template
  • 使用 Wicket 生成注释掉的内容

    出于调试原因 并且一时兴起 我想在 Wicket 页面的 HTML 输出中包含某些信息 即包含在 HTML 注释中 输出会是这样的 其中 1234 是一些有趣的 动态创建的信息 我已经尝试过 但没有成功 Wicket 抱怨 HTML 页面中
  • 将基类函数标记为虚拟函数和最终函数有什么意义吗? [复制]

    这个问题在这里已经有答案了 In various 解释C 11 的final关键字 我看到这样的例子 class base public virtual void f final class derived public base publ