虚拟关键字的偏差
Deviation with virtual keyword
>我有以下结构
struct A{
string s;
A() {
cout<<"in a defaultn";
}
A(string t): s(t) {
cout<<"in a param n";
}
};
struct B: virtual public A{
B(): A("B"){
cout<<"in bn";
}
};
struct C: virtual public A {};
struct D: public B, public C {};
int main()
{
D d;
}
以 A 作为 C 和 B 中的虚拟基类,输出如下
in a default
in b
仅以 A 作为 B 的虚拟基类,输出如下
in a default
in b
in a default
以 A 作为仅 C 的虚拟基类,输出如下
in a default
in a param
in b
并且没有虚拟基类,输出如下
in a param
in b
in a default
谁能解释一下我的偏差?
虚拟继承是为了解决所谓的"死亡之钻">
总之,问题是,如果你调用 D::[A 中的某个函数],它会选择哪个 A - 来自 B 的那个,还是来自 C 的那个,或者分离存在没有意义?
您可以在此处阅读有关该问题的更多信息。https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
相关文章:
- C++虚拟关键字和系统更新
- 虚拟关键字的偏差
- 将虚拟函数与最终关键字结合使用
- 为什么此指针值在C 中添加虚拟关键字后更改
- 如果多级继承,如何使用虚拟关键字
- 与C++中的虚拟关键字混淆
- 虚拟关键字的使用与C++中的简单重新定义
- 如何调用孩子的方法:虚拟关键字不起作用
- 'override'关键字只是对被覆盖的虚拟方法的检查吗?
- 为什么人们将虚拟关键字放在std :: exception :: what()的面前
- 默认关键字虚拟析构函数
- 在 C++11 中同时使用虚拟关键字和覆盖关键字是否有任何细微之处
- 如何避免虚拟关键字
- 在没有虚拟关键字的情况下实现虚拟函数
- 虚拟析构函数和delete关键字
- 虚拟继承:如果关键字在某个时候被遗忘,会发生什么
- 为什么虚拟关键字会增加派生类的大小
- 虚拟继承:当只有一个基类具有"虚拟"关键字时,为什么它有效?有没有更好的方法?
- 具有 *派生* 类中的函数的虚拟关键字对性能的影响
- 虚拟关键字似乎被忽略了