- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑:
#include <iostream>
using namespace std;
class A {// base class
private:
int data;
public:
A(int data = 0)
{
this->data = data;
}
void show()
{
cout << data << endl;
return;
}
};
class B : virtual public A {
public:
B(int data = 0) :
A(data) {
}
};
class C : virtual public A {
public:
C(int data = 0) :
A(data) {
}
};
class D : public B, public C {
public:
D(int dataB = 0, int dataC = 0) :
B(dataB),
C(dataC) {
}
};
int main() {
D d(1, 2);
d.B::show();
d.C::show();
return 0;
}
上面的代码就是diamond类的继承图。基类是A。我使用虚拟继承来避免菱形问题。但为什么这个程序的输出是0,0,而不是我预期的1,2?
B
的构造函数被传递给 data=1
,并且在它的初始化列表中它调用 A
和 data
>。 C
的构造函数类似传递 data=2
及其初始化列表,它调用 A
和 data
。
然后我们要求 B
和 C
子对象显示
它们的值。我们得到的是 0
0
而不是我预期的 1
2
。
最佳答案
当你有这个带有虚拟继承的方案时,层次结构中最派生的类(在本例中为D
)调用公共(public)基类(A
)1,2.
因为A
的构造函数有一个默认参数data = 0
,它可以用作默认构造函数。这就是正在发生的事情,公共(public) A
子对象默认构造,因为您从 D
的成员初始化列表中省略了它。
如果您删除 data
的默认值,您将得到一个很好的编译器错误以强调:
A(int data)
{
this->data = data;
}
main.cpp: In constructor 'D::D(int, int)':
main.cpp:37:16: error: no matching function for call to 'A::A()'
C(dataC) {
1 请记住,对于虚拟继承,只有 一个 类型为 A
的子对象。 B
和 C
子对象都引用它。您对 show
的调用不可能打印不同的内容,因为它们访问相同 数据。这就是为什么它取决于最派生的类,所以没有歧义。
A base class specifier that does not contain the keyword virtual specifies a non-virtual base class. A base class specifier that contains the keyword virtual specifies a virtual base class. For each distinct occurrence of a non-virtual base class in the class lattice of the most derived class, the most derived object shall contain a corresponding distinct base class subobject of that type. For each distinct base class that is specified virtual, the most derived object shall contain a single base class subobject of that type.
In a non-delegating constructor, initialization proceeds in the following order:
First, and only for the constructor of the most derived class, virtual base classes are initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes, where “left-to-right” is the order of appearance of the base classes in the derived class base-specifier-list.
...
2 因此,如果您想使用特定数据构造 A
,您可以像这样定义 D::D()
:
D(int dataA = 0) :
A(dataA) {
}
关于c++ - 为什么这个菱形类继承输出不是我期望的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43581170/
我尝试创建菱形 View 。我想在弹出窗口中使用它。有谁知道该怎么做? 感谢任何建议。 最佳答案 看看 PathShape : 看起来您只需将具有正确线条/填充的路径传递给它,然后将其绘制在弹出对话框
我正在努力弄清楚如何添加像此处图片那样的边框。菱形/方形旋转边框。我试过边框图片,但似乎无法加载它们。 这两个 border-image: url('path-to-your-png') 33
当我知道每个 Angular 的度数时,如何使用 css 创建四边形。 我已经尝试通过变换和倾斜重新创建一个四边形。 但是,这并不是很好。 这是我尝试存档的内容。 具体要求是: 以此为背景的一个 di
本人是一名python初学者,刚刚看到一道有趣的python问题,“用python如何在编译器中打印出菱形图案?” 因此决定尝试一下,代码不多,仅供参考。 代码
我是jointJS的新手,我需要使用JointJS创建自定义形状,我尝试使用矩形创建菱形,使其高度和宽度相同,然后旋转45度,如下所示, var diamond = new joint.shapes
我的程序打印出这样的钻石: ...............* ..........* * * .....* * * * * * * * *
我正在使用 SMFL/C++ 制作一个 2D 等距游戏引擎,我在进行等距计算时得到了这个: 这是我在 2D 引擎中计算等距坐标的公式:对于 I-J 坐标,我有: x = (I - J) * (tile
我正在尝试创建一个横跨页面的菱形样式链接菜单。我还会有一些 java 脚本下拉菜单。像这样的东西:\\\\ 我在 div 上使用倾斜 css3 属性,但它们也会倾斜文本,有没有办法取消倾斜 div 中
我想制作一个带有图像背景的菱形。我能做到,唯一的问题是图像似乎同时旋转,这是我不想要的。这也需要在ie8中工作 fiddle :http://jsfiddle.net/zangief007/2bft2
我正在抓取一些韩语文本,大部分字符显示了 99.9%,但其余字符如下所示。 �Z 例如,它应该抓取“고소를해줫어”,但在我的输出中它给了我“고소를해�Z어”。 我知道这是一个编码问题,我只是不知道如何
我正在尝试用 Java 编写一个程序,从用户那里捕获一个整数(假设数据有效),然后根据整数的大小输出一个菱形,即用户输入 5 ,输出将是: --*-- -*-*- *---* -*-*- --*--
我最近将数据库的内容从一台主机移到了另一台主机。在那之后我得到了奇怪的字符,比如两个菱形或菱形,里面有问号而不是瑞典字符 ä。 我之前在第一台主机上遇到过这个问题,然后我添加了这段代码,它工作正常 $
是否可以使用react-native创建菱形 View ? 这是我想要的图片: 我尝试使用边框样式,但无法实现。 最佳答案 我在这里得到了解决方案:https://rnplay.org/apps/58
我正在尝试使用嵌套的 for 循环来显示星号菱形。 这是迄今为止我的代码: public class Diamond { public static void main(String[] ar
我正在做一个元素,我有一个需要响应的 div 钻石图片。 下图显示了我创建的 div 中的钻石,但它不适用于所有尺寸。我希望钻石能够对浏览器大小做出响应,因此它始终适合。 我有a jsFiddle ,
三角形 等腰直角三角形1 2.7 ? 1
我现在正在 ArgoUML 中设计 UML 事件图。 我知道如果我想设计如下条件: if(condition) { doTrueAction(); } else { doFalseAc
我有 2 个 SKSpriteNode: 一个简单的正方形 (A) 旋转(-45°)(B)的同一个正方形 我需要随时检查另一个 SKSpriteNode(一个球)的中心是否在这些方 block 之一内
1.输出上三角形 第一行1个星,第二行3个星,第三行5个星,第四行7个星,第五行9个星。 分析:三角形的形状由输出的空白和星组成,通过分析每一行输出几个空格,几个星,就可完成输出三角形的工作。
我想在 Swift 中创建一个带有 titleLabel 的菱形 UIButton。我的问题是,titleLabel 文本缩小并且仅显示三个点。如何扩展 titleLabel 的框架以获得足够的标题空
我是一名优秀的程序员,十分优秀!