【发布时间】:2021-10-31 01:55:09
【问题描述】:
我有三门课; A、B 和 C:
class A
{
public:
A() {}
protected:
int x = 0;
int y = 0;
};
class B
{
public:
B() {}
protected:
int x = 1;
int y = 1;
};
class C : public A, B
{
public :
C() {}
};
我希望 C 的 x 成员是来自 A 的成员,而 C 的 y 成员是来自 B 的成员。我该怎么做?因为我写了class C : public A, B,所以现在 C.x 和 C.y 都是 0。当我有多重继承并且我想从一个父级继承一些成员和从另一个父级继承一些成员时,我通常会遇到这个问题。有没有类似成员函数的选项,可以使用关键字using来选择使用哪个函数?
【问题讨论】:
-
您可以通过
A::x和B::y在此处访问所需的变量:https://ideone.com/F4oJ5h -
@drescherjm 是否有类似于成员函数的选项,可以使用关键字
using来“选择”将使用哪个函数? -
你不能从一个继承一些成员而从另一个继承一些成员。您从两者继承 all 成员。
C是A,因此它必须同时具有来自A的x和y。C也是B,因此它还必须同时具有来自B的x和y。你可以看到sizeof(C) == sizeof(A) + sizeof(B)(并且不应该有任何填充)。 -
你能用纯虚方法
int &GetX() = 0;和int &GetY() = 0;为A和B创建一个基类(称为BaseAB)并适当地实现吗?
标签: c++ inheritance multiple-inheritance