如何解决更复杂的钻石问题实例如何使其与常量字段一起使用?
让我们考虑普通钻石问题,但略有改进。现在 class A
具有常量字段。
struct A {
const int a;
A (int _a): a(_a) {}
};
struct B: virtual A {
const int b;
B(int _b,int _a): A(_a),b(_b) {}
};
struct C: virtual A {
const int c;
C(int _c,c(_c) {}
};
struct D: B,C {
D(int _a,int _b,int _c): ??? {}
};
那么,写什么来代替问号是明智的?或者也许可以用不同的方式解决?
解决方法
构造函数可以写成如下:
D(int _a,int _b,int _c): A(_a),B(_b,_a),C(_c,_a) {}
因为 A
是一个虚拟基类,D
构造函数必须初始化它,尽管它不是一个直接基类。当构造最派生类型 D
的对象时,D::D
将首先初始化 A
,然后运行 B
和 C
的构造函数。当 B
和 C
构造函数运行时,它们将忽略虚拟基类 A
,因为 D
已经对其进行了初始化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。