枚举对继承的支持

2024-02-09

我经常遇到这样的情况:我们创建一个作用于某些枚举的类,但后来我们派生并希望在不更改基类的情况下向枚举添加更多值。

我在2009年就看到过这个问题:基枚举类继承 https://stackoverflow.com/questions/644629/base-enum-class-inheritance

但是,我知道 C++11、14、17 中对枚举进行了许多更改。 这些更改是否允许将枚举从基类扩展到派生类?

class Base 
{ 
   enum State {STATE_1, STATE_2, STATE_3}; 
};

class Derived : public Base 
{ 
   enum State {STATE_4};
}; 

...我们希望导出有一个枚举来描述它可以处于的状态,这些状态是:STATE_1、STATE_2、STATE_3 和 STATE_4。我们并不是真的想更改基类中的枚举,因为其他派生类可能没有能力处于 STATE_4 状态。我们也不想创建一个新的枚举,因为我们已经在 Base 中有一个 State 枚举。

8 年后我们是否仍然使用 static const 值来实现这一目标?

class Base 
{ 
   static int STATE_1= 0;
   static int STATE_2= 1;
   static int STATE_3= 2; 
};

class Derived : public Base 
{ 
   static int STATE_4= 3; 
};

不,C++ 不允许这种事情。Base::Color是一个完全独立的类型Derived::Color,与它们零连接。这与任何其他嵌套类型没有什么不同;基类中定义的嵌套类型不连接到派生类中定义的嵌套类型。

枚举也不能相互继承。

无论如何,这类事情往往违背良好的 OOP 实践。毕竟,如果派生类引入了新的枚举器,基类将如何处理它?不同的派生类实例将如何处理它?

If Base定义一个枚举操作,然后Base定义了它所操作的枚举的整体,并且从它派生的每个类都应该能够处理所有这些选项。否则,您的虚拟接口就会出现严重问题。

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

枚举对继承的支持 的相关文章

随机推荐

  • EXCEL 应用程序窗口未在 workbook.close() 上关闭

    当我使用打开工作簿时 wbTest xlwings Book test xlsm EXCEL 应用程序打开并显示工作簿 但是当做一个 wbTest close 之后 工作簿关闭 但 EXCEL 窗口保持打开状态 因此我必须手动关闭它 即使x
  • 如何在jquery中通过url发送json并在下一个html页面上解析它?

    我想通过 url 将 json 数据发送到下一个 html 页面 我通过模拟器检查了它 因为我正在为移动应用程序工作 网址无法重定向到下一页 它目前正在崩溃 这背后的原因是什么 我如何在下一页解析它 我是 jquery 新手 有什么想法吗
  • 如何将我们自己的选项添加到“使用完成操作”菜单

    我想从 使用完成操作 弹出菜单运行我的应用程序 我创建了一个小应用程序 它是 文件编辑器 当我单击任何文件管理器中的任何 txt 文件时 我希望我的应用程序也位于 使用 popmp 菜单完成操作 中 您需要向 Android manifes
  • 在 Ubuntu 20.04 上设置 ONNX 运行时(C++ API)

    我目前正在尝试让我的图像处理程序在 Ubuntu 来自 Windows 上运行 我已经成功构建并链接了 OpenCV 和 Boost 库以与我的 cpp 程序一起使用 但是我还没有找到任何关于在 Ubuntu 20 04 上设置 Onnx
  • r动画,参数曲线

    我正在使用动画包来绘制参数曲线 x sin t 和 y sin t 2 以及使用以下代码追踪曲线的圆 require animation x lt seq 1 1 length 20 y lt x 2 plot x y type l lib
  • execve("/bin/sh", 0, 0);在管道中

    我有以下示例程序 include
  • 从私有 Docker 注册表中删除镜像的方法

    我设置了一个私有 Docker 注册表 并且我已将其他计算机上的一些映像推送到此注册表 它是一个 V2 注册表 我不知道从存储库中删除图像的新方法 因为这些推送的图像没有在 CLI 中列出 docker 图像 谁能建议我从磁盘中删除这些图像
  • 为 302 重定向到的另一个域设置 cookie

    这个问题比其他任何问题都更像是一个现实检验 我很确定这是可能的 但想确定一下 我正在编写一个代理服务器 它接收 HTTP 请求 将它们传递到远程服务器 然后返回远程服务器的响应 我遇到了一个问题 远程服务器响应之一是设置 cookie 的
  • _popen: 不显示 shell 窗口 (SW_HIDE)

    当我在 c mfc 中执行 popen 命令时 它会打开一个我不喜欢的 shell 窗口 是否可以将其隐藏 例如 当您尝试使用 ShellExecute 函数执行命令时 它可以选择使用 SW HIDE 隐藏 shell 窗口 注释来自文档
  • 如何从 django 的查询集中排除非活动用户

    我想从我的项目中排除非活跃用户 example 1 url users 1 friends will show all friends of that user 我想只显示朋友列表中的活跃用户 example 2 url users 1 f
  • 如何在 iOS 上开始使用 ARM?

    只是好奇如何开始了解 iOS 下的 ARM 任何帮助都会非常好 在我看来 最好的开始方式是 编写 C 代码小片段 后来的 Objective C 查看对应的汇编代码 找出足以理解汇编代码的内容 Repeat 为此 您可以使用 Xcode 创
  • 为什么即使在使用异步等待多个调用后仍然得到空响应?

    这是简单的节点路由 其中 调用异步api 需要做的是return data循环之后 但它返回空白对象 try const array brunch lunch crunch const data array map async d gt c
  • 如果广度优先搜索 (BFS) 可以更快地完成同样的事情,为什么还要使用 Dijkstra 算法呢?

    两者都可用于从单一源查找最短路径 BFS运行在O E V 而 Dijkstra 运行O V E log V 另外 我见过 Dijkstra 在路由协议中的使用很像 因此 如果 BFS 可以更快地完成同样的事情 为什么还要使用 Dijkstr
  • 比较同一目录中的文件

    我们有 20 个文件 名为file txt全部在一个目录中 file1 txt file2 txt file20 txt 在同一目录中 我们还有其他文件 我们需要忽略它们 someotherfile csv somemore txt etc
  • 无法连接到任何指定的 MySQL 主机

    问题就在这里 我正在尝试执行查询及其抛出和异常connection Open 奇怪的是 在同一个应用程序上我正在执行 选择 查询并且它工作正常 但是当我执行 更新 查询时 它会抛出 无法连接到任何指定的 MySQL 主机 错误 一直卡在这上
  • 如何在 nginx 中配置重定向到带有斜杠的 url?

    我想将不带斜杠的 URL 重定向到带尾部斜杠的路径 所以 一些 url to 一些网址 其余的 URL 例如 some url xml 某个网址 some url q v 一些网址 应该保持不变 我找到了这篇文章https www atea
  • Grails 自动重新加载新的控制器操作

    I ve 创建了新的 Grails 2 4 3 项目 created TestController set grails reload enabled true in BuildConfig groovy 运行应用程序grails relo
  • char 数组的问题 = char 数组

    I have char message1 100 char message2 100 当我尝试做的时候message1 message2 我收到错误 分配给类型时不兼容的类型 char 100 从类型 char 我有类似的功能 if sen
  • 用CSS按比例调整图像大小,可能吗?

    有没有办法用 CSS 调整图像大小并保持其比例 容器有固定的宽度和高度 div class container img class theimage src something div 我问的原因是因为布局可以改变 通过类从列表到图标 并且
  • 枚举对继承的支持

    我经常遇到这样的情况 我们创建一个作用于某些枚举的类 但后来我们派生并希望在不更改基类的情况下向枚举添加更多值 我在2009年就看到过这个问题 基枚举类继承 https stackoverflow com questions 644629