C++ 多重继承 - 为什么你不工作?

2023-11-28

我正在尝试找出一个有趣的多重继承问题。

祖父母是一个具有多个方法的接口类:

class A
{
public:
    virtual int foo() = 0;
    virtual int bar() = 0;
};

然后是部分完成这个接口的抽象类。

class B : public A
{
public:
    int foo() { return 0;}
};

class C : public A
{
public:
    int bar() { return 1;}
};

我想要使​​用的类继承自父类,并通过 using 指令指定什么方法应该来自哪里:

class D : public B, public C
{
public:
    using B::foo;
    using C::bar;
};

当我尝试实例化 D 时,我因尝试实例化抽象类而收到错误。

int main()
{
    D d; //<-- Error cannot instantiate abstract class.

    int test = d.foo();
    int test2 = d.bar();

    return 0;
}

有人可以帮助我理解这个问题以及如何最好地利用部分实现吗?


你没有钻石继承权。这B and C的基类D每个人都有自己的A基类子对象,因为它们实际上不是继承自A.

So, in D,实际上有四个纯虚成员函数需要实现:A::foo and A::bar from BA::foo and A::bar from C.

您可能想使用虚拟继承。类声明和基类列表如下所示:

class A
class B : public virtual A
class C : public virtual A
class D : public B, public C

如果您不想使用虚拟继承,那么您需要重写中的其他两个纯虚拟函数D:

class D : public B, public C
{
public:
    using B::foo;
    using C::bar;

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

C++ 多重继承 - 为什么你不工作? 的相关文章

  • Unity3D StartCoroutine 调用一个函数,该函数什么时候返回?

    我知道Unity3D StartCoroutine调用了一个与StartCoroutine在同一线程上运行的函数 但是被调用的函数什么时候返回到原始调用者 我在互联网上查找了一个很好的 Unity3D Coroutine 示例 但找不到完整
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 我可以同时使用命令行 Git 工具和 TortoiseGit 吗?

    有时 使用 git bash 比使用 TortoiseGit 更详细且更容易获取有关 git 的信息 因此 我想使用 git bash 来解决非常具体的问题 例如 同时创建分支 签出并提交未提交的更改 git checkout b my n
  • 将 ANTLR 4 集成到 C++ 应用程序中

    Recently I picked up a copy of The Definitive ANTLR 4 Reference and since I am sophisticated when it comes to working wi
  • 函数式编程:副作用

    大多数教程 文章 书籍都会讨论函数式编程时的副作用 采取这个Python代码 def isPrime n k 2 while k lt n if n k 0 return False k 1 return True 文中说上面的函数有局部副
  • 为什么CALL会在这个脚本中打印GOTO帮助消息?为什么之后的命令会执行两次?

    这是一个有趣的话题 我尝试着研究那里讨论的两件事 您可以通过双扩展访问带有特殊符号的标签 标签包含 无法使用 因为GOTO and CALL打印他们的帮助消息而不是执行 结果如下 echo off setlocal enableDelaye
  • 参数和参数之间的区别[重复]

    这个问题在这里已经有答案了 参数 和 参数 之间有区别吗 或者它们只是同义词 论证通常用于以下含义 实际论证 vs 形式参数 The 形式参数是函数声明 定义 原型中给出的内容 而实际论证是调用函数时传递的内容 如果您愿意的话 可以是形式参
  • epoll 是否保留 fd 的注册顺序?

    我正在研究 Linux 系统调用 我发现了一些方面epoll 我不清楚 说 我创建一个epoll实例 epollfd epoll create 50 接下来 我在中注册 50 个文件描述符for loop for i 0 i lt 50 i
  • Flex:防止滚动条自动显示时覆盖内容

    我在Flex中有一个画布 只能在垂直方向滚动 所以我将画布的属性设置如下 verticalScrollPolicy auto horizontalScrollPolicy off 这里的问题是垂直滚动条在出现时覆盖了内容 尽管还有足够的水平
  • AJAX 和 NS_ERROR_DOM_BAD_URI 错误

    我一直遇到以下问题 我认为这可能是由于我的方法可能被误导 但希望在您的帮助下我可以解决这个问题 基本上 对于我的网站 我有一个搜索提供商 已付费 所以我没有违反任何使用条款 提交搜索表单后 我将被定向到显示结果的域 虽然我可以自定义返回结果
  • JQuery Ajax 调用给出 404 'Resource Not Found' 错误,但正常的 URL 调用没问题

    在 ASP NET MVC 项目中使用 JQuery 调用时 我遇到了一个奇怪的问题 我发现 Ajax 调用给出 404 资源未找到错误 但是当我使用通常的 URL GET 调用时 我可以成功调用服务器 没有任何问题 知道为什么会这样吗 这
  • Java-获取当前计算机的声音输出

    有没有办法从计算机的默认音频输出中获取声音 我不想操纵它 我只想对频率进行视觉表示 很像均衡器 这个问题是重复的 实时音频可视化 Java java 声音 API 允许您与当前的音频输出进行交互 您可以在这里找到参考 http www ja
  • 无法在多风格应用程序中构建功能模块

    我在 Android Studio 3 1 1 上使用 Gradle 4 4 和 Gradle Android 插件 3 1 1 我有 2 种风格 a 和 b 由于以下错误 我无法构建我的项目 Cannot choose between t
  • 使用 DRF ModelViewSet 和 TemplateHTMLRenderer 时如何访问模板中的数据?

    我有一个 Django Rest 框架ModelViewSet我正在尝试使用TemplateHTMLRenderer显示 HTML 跟随在tutorial from rest framework import permissions ren
  • Python 3.4 的 HTML 解析器

    我有一些用 Python 2 7 编写的代码 它使用 HTMLParser 我目前使用的是Python 3 4 我找不到 HTMLParser 下载模块 如果存在的话 有人可以分享一下链接吗 如果没有 我该怎么办 您不需要安装 Python
  • 如何使用 Express 添加 MIME 类型

    我正在尝试让 Firefox 播放视频标签 通常 我会将其添加到 Apache 上的 htaccess 文件中 AddType video ogg ogv AddType video mp4 mp4 AddType video webm w
  • 解析转发的电子邮件

    我正在写一些代码parse转发的电子邮件 我不确定是否有一些 Python 库 一些我可以坚持使用的 RFC 或一些其他资源可以让我自动执行任务 准确地说 我不知道转发电子邮件的 布局 是否包含在某些标准或建议中 或者它是否只是多年来才发展
  • VBA公共数组:如何?

    所以今天的问题让我很生气 因为这应该很容易 但我找不到答案 如何在VBA中声明公共数组 我正在使用包含字母 A B C 的数组 因为我正在使用 Excel 单元格 并且我不想在我创建的每个函数中声明它 对吧 我尝试先在网上查看 我读到您必须
  • 何时使用正则表达式与内置字符串方法?

    我注意到关于何时使用正则表达式以及何时使用内置字符串函数 如 String Replace NET 的很多小争论 似乎很多人建议在处理字符串时总是 总是 总是使用正则表达式 除了显示它们之外 这真的是最佳实践还是只是我的错误印象 当问题只是
  • 将图像上传到特定的 Facebook 相册

    我可以使用 facebook graph api 通过将数据发布到来创建相册 http graph facebook com ALBUM ID albums 它返回一个 id 但不是专辑 id 我通过两种方式确认了 通过转到该专辑 援助与我
  • Kotlin verifyError:向后分支 90 上存在未初始化的对象

    我正在使用Kotlin 入门指南使用以下配置在 IntelliJ IDEA 上首次设置 Kotlin IntelliJ IDEA 2017 2 5 Build IC 172 4343 14 built on September 26 201
  • C++ 多重继承 - 为什么你不工作?

    我正在尝试找出一个有趣的多重继承问题 祖父母是一个具有多个方法的接口类 class A public virtual int foo 0 virtual int bar 0 然后是部分完成这个接口的抽象类 class B public A