实现具有多重继承的纯虚函数

2024-03-15

假设有这样一个接口:

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

还有一个班B它实现了这个接口:

class B:public A{    
 public:   
  virtual foo(){} //Foo implemented by B   
}

终于有一节课了C有课程A and B作为基类:

Class C : public A, public B {
};

我的问题是,有一种方法可以告诉编译器,foo是课堂上的那个B无需显式调用B::foo()?


正如 @BenVoigt 在评论中指出的那样,下面的答案仅由于 g++ 中的错误而有效(这意味着它不能保证继续工作,而且绝对不可移植)。因此,尽管如果您使用特定的(有缺陷的)编译器,它可能会执行您想要的操作,但它不是您应该使用的选项。

Do use 虚拟继承 https://stackoverflow.com/q/21558/1214731尽管。


这并不完全是场景code问题中暗示着,但是句子

我的问题是,有一种方法可以告诉编译器 foo 的实现是来自 B 类的实现,没有执行 显式调用 B::foo()?

似乎要求语法来区分函数的多个基本版本,而不使用::预选赛。

您可以使用using指示:

#include <iostream>
class A {
public:
A(){}
virtual void foo(){std::cout<<"A func";}
};

class B: virtual public A {
  public:
  B(){}
  virtual void foo(){std::cout<<"B func";}
};
class C:virtual public A, virtual public B {
    public:
    C(){}
    using A::foo; // tells the compiler which version to use
                   // could also say using B::foo, though this is unnecessary
};

int main() {
    C c;
    c.foo(); // prints "A func"
    return 0;
}

当然,正如其他答案所指出的那样,问题中的代码本身根本不需要这样做。

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

实现具有多重继承的纯虚函数 的相关文章

  • 与 MinGW 的静态和动态/共享链接

    我想从一个简单的链接用法开始来解释我的问题 假设有一个图书馆z它可以编译为共享库 libz dll D libs z shared libz dll 或静态库 libz a D libs z static libz a 让我想要链接它 然后
  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 如何在 C++ 中为指针“this”赋值

    在函数中 如何分配this一个新的价值 您可以分配对象this点于 this XY 但你不能分配直接值this this XY Error Expression is not assignable
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que

随机推荐

  • Marshmallow 应用程序权限撤销通知? [复制]

    这个问题在这里已经有答案了 在 Android 6 0 Marshmallow 中 用户可以撤销特定的应用程序权限 即使是从应用程序内部授予该权限也是如此 我知道我可以检查权限ContextCompat checkSelfPermissio
  • 启动spark shell时出错

    我刚刚下载了最新版本的 Spark 当我启动 Spark shell 时 出现以下错误 java net BindException Failed to bind to 192 168 1 254 0 Service sparkDriver
  • 自定义 ListView 与 RadioButton 单选

    我希望你们中的一些人可以帮助我解决这个问题 我有一个自定义列表视图 2 个文本视图和 1 个单选按钮 我想把它作为单一选择 但每次我 单击列表视图上的项目 它不会删除该项目 从另一个单选按钮 检查 我的xml代码
  • C# - 方法的自动委托类型

    任何避免显式声明的方法MyMethodDelegate在这样的场景下 bool MyMethod string x BeginInvoke new MyMethodDelegate MyMethod x 我了解 lambdas a la g
  • C语言精确计时

    我下面有一些代码 我使用这段代码输出一些 1 和 0 unsigned output 38 来自嵌入式板的 GPIO 我的问题 两个输出值 1 0 或 0 1 之间的时间应该是416微秒正如我所定义的clock nanosleep下面的代码
  • 嵌套整数字段上的 Postgres jsonb 索引

    我的 postgres 数据库中有以下数据结构 一个名为的 jsonb 列customer RequestId 00000000 0000 0000 0000 000000000000 Customer Status A AccountId
  • 如何在同一个 select 语句中使用 count 和 group by

    我有一个SQLSELECT查询也使用GROUP BY 我想统计之后的所有记录GROUP BY子句过滤结果集 有什么办法可以直接用SQL来实现这个功能吗 例如 如果我有桌子users并想要选择不同的城镇和total用户数量 SELECT to
  • 为什么 Vue.js Chrome Devtools 没有检测到 Vue.js?

    我有一个简单的工作 Vue js 应用程序的以下代码 但 Vue js 开发工具没有响应 前几天还好好的 现在就不行了 可能是哪里出了问题 当我去webstore https chrome google com webstore detai
  • 使用 edmx 文件时如何指定连接字符串中的元数据位置

    我有一个 Web 项目 其数据模型在 edmx 文件中定义 连接字符串的开头如下 元数据 res 这一段时间以来效果很好 但是参与该项目的其他人创建了一个也使用实体框架的 dll 并将其添加到 bin 文件夹中 现在 当我尝试创建连接时 加
  • 为什么我不能使用具有存在量化类型的记录选择器?

    当使用存在类型时 我们必须使用模式匹配语法来提取forall编辑值 我们不能将普通的记录选择器用作函数 GHC 报告错误并建议使用与此定义的模式匹配yALL LANGUAGE ExistentialQuantification data A
  • 当参数有空格时,如何从 powershell 调用 msdeploy?

    我在尝试从 powershell 脚本发送到 msdeploy 的参数中遇到了空格问题 还有许多其他相关文章 但都没有解决问题 使用 Power Shell 和 MSDeploy 时遇到的问题 http forums iis net p 1
  • 无法加载文件或程序集“Microsoft.Office.Interop.Excel,版本=14.0.0.0”

    我有一个使用 MS Excel 文件读 写的网站 我将相关的 dll 添加到网站的 Bin 文件夹中 它在我的本地主机上运行得很好 我想是因为我在我的电脑上安装了 MS Excel 2010 但是当我将其上传到远程电脑并运行该网站时 它会抛
  • 设计模式 - Objective-C - MVC 模型视图控制器

    您好 我已经阅读了网上有关 MVC 的教程 并且已经阅读了此处的主题 我想我已经了解了 MVC 的概念 但我不确定它的实现 我尝试将其应用于一个简单的程序 一个带有标签和按钮的窗口 该按钮增加一个计数器 标签显示它的值 我尝试了两种不同的方
  • 如何运行命名空间内的 JavaScript 函数

    如果我有类似的东西 App editingMode function function setEditingMode entityID editingMode val 1 ajax type POST url Organisations M
  • 如何控制CVS存储库中的文件权限?

    目前 一些用户的 umask 设置方式导致对常规文件的执行权限 我想避免 有没有办法强制所有签入的文件只能被读取 但有一些例外 在 CVS 中处理此问题的推荐方法是什么 Cvs 命令选项 watch 也会阻止恢复文件权限 如果观看 则检出文
  • 使用不带标签的 Git 描述

    我有一个存储库 当我运行时它只给我一个哈希值git describe 直到今天我才知道它这样做是因为 always选项 这就是我正在使用的 因为该存储库没有标签 我有另一个包含很多标签的存储库 我该如何使用git describe排除标签并
  • Mysql 选择不在表中的位置

    我有 2 个表 A 和 B 具有相同的主键 我想选择 A 中而不是 B 中的所有行 以下方法有效 select from A where not exists select from B where A pk B pk 但看起来很糟糕 A
  • Oracle Select IN 参数中的多个字段

    Select FROM STUDENT WHERE student course student major IN SELECT schedule course schedule major FROM schedule 如果我必须提供静态值
  • defaultCalendarForNewEvents 失败

    当我尝试调用 newEventStore defaultCalendarForNewEvents 时 它返回一条错误消息 707 907 defaultCalendarForNewEvents failed Error Domain EKC
  • 实现具有多重继承的纯虚函数

    假设有这样一个接口 class A public virtual foo 0 还有一个班B它实现了这个接口 class B public A public virtual foo Foo implemented by B 终于有一节课了C有