虚拟基类和初始化列表[重复]

2023-12-08

可能的重复:
gcc c++ 虚拟继承问题

Hi all,

我想知道编译器在使用虚拟基类的多重继承时如何处理不同的初始化值。考虑一下臭名昭著的“恐惧钻石”继承计划:

     Base
     / \
    /   \
  D1     D2
    \   /
     \ /
     Join

为了避免有两份副本Base in Join,我使用虚拟继承D1 and D2(参见例如here)。现在,让我们说Base不是抽象的,但有一个成员字段,在其构造函数中初始化:

class Base { 
public:
    Base(int x_) {x = x_;};
    virtual ~Base(){};

public:
    int x;
};

class D1 : public virtual Base {
public:
    D1() : Base(1) {};
    virtual ~D1(){};
};

class D2 : public virtual Base {
public:
    D2() : Base(2) {};
    virtual ~D2(){};
};

class Join : public D1, public D2 {
public:
    Join(){};
    ~Join(){};
};

int main()
{
   Join j;
   cout << j.x << endl;

   return 0;
}

输出是 1、2 还是取决于编译器?


它不应该结合。虚拟基由最派生的类初始化,该类是Join. Join没有显式初始化Base but Base没有可访问的默认构造函数。

[它也不会编译,因为类的定义需要以;但我认为这是一个错字。main也应该返回int我假设j.x是一个拼写错误j->x.]

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

虚拟基类和初始化列表[重复] 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 为什么 Ruby 将 FixNum n 哈希为 2n+1?

    为什么 Ruby 对整数进行哈希处理n to 2 n 1 gt gt 0 1 2 3 each x puts x hash 1 3 5 7 我可以看到 您并不总是需要复杂的哈希值 尤其是对于简单的对象 但为什么采用 双倍加 1 规则而不是像
  • 基于 Web 表单的 Web 应用程序 URL,不带“.aspx”,如 stackoverflow.com

    我想知道是否可以在不显示 Webforms 应用程序页面的 URL 的情况下显示 aspx扩大 例如 http stackoverflow com questions ask代替http stackoverflow com question
  • Internet Explorer 11 不稳定的 CSS3 动画

    请参考这个小提琴 http jsfiddle net eQegA 3 div class spinner div spinner width 100px height 100px border 50px solid blue border
  • 设置ggplot2标签背景颜色

    我有这个条形图 group c A A B B value c 25 75 40 76 day c 1 2 1 2 dat data frame group group value value day day dat ggplot data
  • 是否可以为 iPhone 提供临时构建,而不询问设备 ID?

    是否可以为 iPhone 提供临时构建 而不询问设备 ID 我想将应用程序部署给几个人 但我不想要求设备 ID 来创建配置文件和所有其他内容 那可能吗 如果没有 最简单的方法是什么 简单地说 不 如果您担心从测试人员处获取 UDID 的复杂
  • 是否可以从 Swift 中的 UITextView 元素的光标位置获取索引(String.Index)值?

    我正在寻找拉索引值 String Index 从 UITextView 元素的用户光标位置 我正在使用selectedTextRange方法来获取 UITextRange 值 我如何使用它来检索索引值 您可以获取从文档开头到所选范围开头的选
  • 在 Dynamic Linq 中使用“Single”

    我正在尝试将在 Linq 中工作的 Linq 查询转换为能够在动态 linq 中工作 使用 System Linq Dynamic 因为我希望用户能够形成自己的查询 并且将添加此查询字符串在运行时到其他查询字符串上 我有一个疑问 db in
  • Struts 2 中的 ModuleConfig 和 PluginConfig

    我正在从事 Struts 2 迁移工作 我的 Struts 1 应用程序正在使用ModuleConfig and PlugInConfig类 如何在Struts 2中使用这些类 ModuleConfig and PlugInConfig是S
  • 从 main 调用 pthread_exit 可以吗?

    当我打电话时pthread exit from main 程序永远不会终止 我希望程序能够完成 因为我正在退出程序的唯一线程 但它不起作用 看来挂了 include
  • CSV 新行字符

    我有一个 Excel 模板 用于填写数据并将其导出到 CSV 以填充我网站上的以下页面 http play mink7 com ifocus v4 careers php 当我在 Windows 中导出文件时 我得到了正确的新行字符的格式
  • 瞬态变量继承且子类被序列化

    如果从可序列化类继承瞬态变量 并且如果我更改子类中变量的值 瞬态变量是否仅作为瞬态继承 如果子类反序列化会发生什么 反序列化子类后瞬态变量是否会保持其行为并具有默认值 字段不能被继承 只能被隐藏 如果你有一个transient超类中的字段的
  • 当 classProbs=TRUE 时,在 R 中使用 Caret 的 SVM 会产生不同的结果

    当我尝试使用支持向量机提取预测概率时 我提出了以下问题 SVM 通常分类算法的概率截止值为 0 5 但我需要分析准确性如何随概率截止而变化SVM机器学习算法 I used caret封装在R留一交叉验证 LOOCV 首先 我安装了常规支持向
  • 如何使用 AngularJS 在 ng-init 中传递作用域变量

    我在将从范围声明的变量传递到 ng init 时遇到问题 到目前为止我有这样的事情 scope x 10 div 如何从 ng init 函数内的范围传递 x var 很多人会告诉你不应该这样做 正如这里的文档中提到的 https docs
  • matlab dymola 连接在一段时间后失败

    我有 mat 文件中的实验数据和用 dymola 编写的模型 我使用 dymolaM m 文件将命令从 matlab 发送到 dymola 这样我就可以使用 matlab 来优化模型的参数 Matlab从 mat文件中读取数据 以正确的方式
  • 从 sqlalchemy core 中的函数调用中选择列

    在 postgresql 我有select col1 col2 from my function 我怎样才能在 sqlalchemy 核心中做到这一点 select func my function 将结果作为字符串给出 但我想要一个元组
  • 密码字段默认值

    我怎样才能既使用 HTML 密码输入又设置一个可读的文本默认值 因为密码输入会将字符变成点或星号 我可以用 JavaScript 做到这一点吗 所以 如果我理解正确的话 你希望它读取 密码 或普通字母的任何内容 直到有人点击它 此时它会变成
  • 实体框架延迟加载和 ICollection

    假设我有一个名为 Stock 的类 它有一个虚拟的 ICollection 价格 它是一组历史价格 如果您获取股票并在股票具体化后查询价格 但应用像 mystock Prices OrderByDescending px gt px Dat
  • 3D 表面 JavaFX

    我正在尝试在 JavaFX 中实现我自己的 3D 表面动画 但我不明白一切都应该如何工作 有人可以帮助我了解哪些应该去哪里吗 已经知道使用类构建 Mesh 需要类对象TraingleMesh然后必须使用方法添加点mesh getPoints
  • Google 地图 v3 map.getBounds().containsLatLng 不是函数

    我如何在此处设置 setMap 函数以将此代码移植到 v3 或者将其通常移植到 v3 如果元素位于地图屏幕之外 则地图居中 while map getBounds containsLatLng marker getPosition show
  • 虚拟基类和初始化列表[重复]

    这个问题在这里已经有答案了 可能的重复 gcc c 虚拟继承问题 Hi all 我想知道编译器在使用虚拟基类的多重继承时如何处理不同的初始化值 考虑一下臭名昭著的 恐惧钻石 继承计划 Base D1 D2 Join 为了避免有两份副本Bas