Down
为什么不通过Base
&调用Left
来调用Right
ctor class Base {
public:
Base() { cout << "base-ctor" << endl; }
Base(string a) { cout << a << endl; }
};
class Left : virtual public Base {
public:
Left(string a) : Base(a) {}
};
class Right : virtual public Base {
public:
Right(string a) : Base(a) {}
};
class Down : public Left, public Right {
public:
Down(string a) : Left(a), Right(a) {}
};
int main() {
Down x("down");
// -> base-ctor
}
两次?
{{1}}
答案 0 :(得分:1)
因为您正在使用基类的虚拟继承:
class Left : virtual public Base {
class Right : virtual public Base {
如果您想要将其调用两次,请删除虚拟关键字:
class Left : public Base {
class Right : public Base {
如果您想避免钻石问题,本文可能对您有用&#39;: http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
答案 1 :(得分:0)
为什么要这样?它实际上不是虚拟继承的全部要点,您已经选择在代码示例中使用它。我猜你决定在不研究它的作用的情况下使用它。
至于这种行为是&#34;不正确&#34;,根据定义,你的期望是不正确的。