我有 2 个基类(B1
和 B2
),它们派生自公共(public)基类 (B),它们有一个公共(public)变量 (let: int x;
from base B), in 1st base x=0
, in the 2nd base x=10
(默认值在 B1,B2 构造函数中给出) .
现在,如果我再派生一个类(类 D:虚拟公共(public) B1、虚拟公共(public) B2{}
)。
根据虚拟概念,这里只有一个 x
拷贝可用,现在如果我尝试使用 x 的派生类对象访问
我将获得 O/p(x
值x=0
或 x=10
),为什么?
提前致谢。
最佳答案
这不是使用虚拟基类的正确位置(如果您不进一步派生)。也许您在混淆概念。
class A;
class B : virtual public A
class C : virtual public A
class D : public B, public C
在这种情况下,将基类设为虚拟化是有意义的,因为当您看透 D 时,有两条通往 A 类的路径。
你的情况是:-
class B1
{
public:
int x;
};
class B2
{
public :
int x;
};
class D : public B1, publicB2
{
public :
void accessBase ()
{
this->x; //error as ambigous.
this->B1::x; //fine it's B1's x.
this->B2::x; //fine it's B2's x.
}
};
关于c++ - 多重继承会调用哪个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885996/