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

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(使用前将#替换为@)

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

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 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有