C++11新特性探究:显式override和final

2023-11-01

C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用​override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。

C++11标准引入了final说明符,很好的解决了上面的问题。final告诉编译器,该虚函数不能被派生类重写。

废话不多说,上代码,试着指出来下面的代码有哪些问题?

class Base
{
public:
  virtual void plant(int x) {}
};

class Derived : public Base
{
public:
  void plant(int x) final {}
};

class SunDerived final : public Derived
{
public:
  void plant(int x) {}
};

class GrandSunDev : public SunDerived
{
};

​上述代码中,基类Derived的虚函数 plant 声明为final,那么,派生类SunDerived重写 plant 函数的时候,编译器会报错。​

final说明符不止可以声明虚函数,还可以声明类,如果在类定义的时候,声明了final,那么,这个类将不能作为基类被其他类继承,SunDerived被声明为final,那么GrandSunDev再继承SunDerived的时候,编译器会报错。​

注意:C++11标准中,无论是override还是final,都没有背作为保留的关键字,override只有在虚函数尾部才有意义,final只有在虚函数尾部以及类声明的时候,才有意义。

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

C++11新特性探究:显式override和final 的相关文章

  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显
  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3

随机推荐

  • 用Python实现队列(queue)

    一 队列的定义 队列 一种先进先出 FIFO First in First Out 的线性结构 即在队列的尾部入队 在队列的头部出队 入队 即队列添加成员 在队列的尾部完成 出队 即队列删除成员 在队列的头部完成 在创建队列时 一般以数组为
  • 登陆界面的测试

    一 功能 1 用户名和密码 用户名和密码的合法性 长度 字符 空 用户名和密码的一致性 验证码的合法性和一致性 2 登陆功能 跳转正确 3 页面其他链接 如忘记密码 4 记住用户名 记住密码的功能 5 输入框是否支持复制和粘贴 6 密码显示
  • 图像分割:Python的SLIC超像素分割

    图像分割 Python的SLIC超像素分割 1 什么是超像素 2 为什么超像素在计算机视觉方面有重要的作用 3 简单线性迭代聚类 SLIC 4 效果图 5 源码 参考 1 什么是超像素 在单个或多个通道中 图像表示为像素网格 我们采用这些M
  • mysql8 java Could not create connection to database server. Attempted reconnect 3 times问题

    最近照着网上的一个博主的例子 学习ssm 结果一个mysql8 搞得我都崩溃了 各种连不上 总结一下出错原因 1 maven中的jdbc连接jar包 版本也要换成高版本
  • Linux基本权限(详解)

    目录 文件权限位 更改文件权限 chmod指令 chown指令 chgrp指令 数字权限 umask命令 文件权限位 显示当前目录下文件的详细信息 ls l 也可以写成 ll Linux下文件的权限位共有十个 按照1333来划分 第一位代表
  • 服务器操作系统比较,服务器操作系统比较

    服务器操作系统比较 内容精选 换一换 Atlas 800 训练服务器 型号 9000 安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 800 训练服务器 用户指南 型号9000 风冷 或 Atlas 800 训练服务器
  • 特征筛选3——卡方检验筛选特征(单变量筛选)

    sklearn文档 https scikit learn org stable modules generated sklearn feature selection chi2 html 卡方检验只适用分类任务 用来检验特征与y是否相互独立
  • java获取response与request

    java获取response与request 方式一 监听 web xml
  • Makefile 多个目标匹配的问题

    在windows下直接使用mingw32 make ZTHREAD A the static link library file of ZThread ZTHREAD A F ZJ tools cpp libs ZThread 2 3 2
  • Flutter 文字渐变色

    目前在做的项目需要用到渐变文字的需求 但是都用图的话 会导致包很大 所以打算自己去写一个渐变 本次渐变用到的组件是ShaderMask这个组件来完成咱们的文字渐变色 代码实现 text里面的文字需要设置为白色字体 ShaderMask sh
  • [ 云计算 华为云 ] 解决办法:如何更换华为云云耀云服务器L实例的镜像

    文章目录 问题描述 分析原因 解决办法 文末送书 ANSYS Workbench项目分析与案例实操详解 博主推荐理由 本书内容简介 本书作者简介 废话在前 直接看解决办法的这段可以过 讲道理 一般情况下云服务器 镜像是随便更换的 但是我发现
  • 华为OD机试 - 查找众数及中位数(Java)

    题目描述 众数是指一组数据中出现次数量多的那个数 众数可以是多个 中位数是指把一组数据从小到大排列 最中间的那个数 如果这组数据的个数是奇数 那最中间那个就是中位数 如果这组数据的个数为偶数 那就把中间的两个数之和除以2 所得的结果就是中位
  • count(*)和group by的用法

    https www cnblogs com gongchengshiwhl p 7994761 html https blog csdn net weixin 44938368 article details 109614917 1 cou
  • 将设计稿图标制作成iconfont(ps cs6 + ai cs6)

    项目开发中需要用到icon iconfont网站上找的icon风格各式各样 就想着把设计稿的图标直接转成icon就好了 1 先在ps装一个脚本 save ps to svg1 0 jsx 放在ps安装目录下的 Presets Scripts
  • python Opencv和pyautogui实现自动识图点击

    python Opencv和pyautogui实现自动识图点击 1 导入python及其他模块 匹配类是上一章博客内容 pyautogui自带的图片匹配效果不是很理想 就使用Opencv的图片匹配来实现图片的定位 python 使用模版匹配
  • Vue.js 学习笔记十三:Vue Router 之导航守卫

    目录 导航守卫 全局前置守卫 全局后置钩子 路由独享的守卫 组件内的守卫 导航守卫 我们来考虑一个需求 在一个 SPA 应用中 如何改变网页的标题呢 网页标题是通过
  • linux安装php7的方法

    1 安装依赖包 1 安装依赖包 1 yum install y gcc gcc c make zlib zlib devel pcre pcre devel libjpeg libjpeg devel libpng libpng devel
  • linux中的USB摄像头驱动(应用层)(基于V4L2)

    V4L2 是 Video4Linux2 的缩写 是 Linux 内核中的一个视频设备驱动接口 USB V4L2 初始化流程 1 打开设备节点 open 2 配置参数 分辨率 fps 格式 ioctl 3 请求分配帧缓存 gt 地址映射 4
  • Remember The Word-Trie

    题目 UVaLive 3942 include
  • C++11新特性探究:显式override和final

    C 中 我们一般可以以基类声明纯虚函数 然后让派生类继承并重写这个虚函数 用 override表示显示覆盖基类方法 但一直没有提供一种方法来阻止派生类继承基类的虚函数 C 11标准引入了final说明符 很好的解决了上面的问题 final告