【发布时间】:2021-01-20 20:22:21
【问题描述】:
我有一个基类 A、2 个子类 B 和 C,它们都继承自 A,我有一个继承自 B 和 C 的类 D,我想从 B 中获取 _a,从 C 中获取 _b,而不必如果可能的话,为 print_a 和 print_b 做一个虚拟方法
# include <iostream>
class A
{
public:
A(void) : { }
~A(void) { }
inline void print_a(void) { std::cout << _a << std::endl; }
inline void print_b(void) { std::cout << _b << std::endl; }
protected:
int _a;
int _b;
};
class B : virtual A
{
public:
B(int a) : A() { _a = a, _b = 0; }
~B(void) { }
protected:
using A::_a;
using A::_b;
};
class C : virtual A
{
public:
C(int b) : A() { _a = 0, _b = b; }
~C(void) { }
protected:
using A::_a;
using A::_b;
};
class D : virtual public A, private B, private C
{
public:
D(void) : A(), B(5), C(5) { }
~D(void) { }
private:
using B::_a;
using C::_b;
};
int main(void)
{
D foo;
foo.print_a();
foo.print_b();
return (0);
}
我的 D 类从 A 继承方法 print_a 和 print_b,我希望它从 B 继承 _a = 5 和从 C 继承 _b = 5,但它不起作用,它输出:
0
5
代替:
5
5
【问题讨论】:
-
您可以通过将 D 的定义更改为
class D : virtual public A, private C, private B来修复它,但如果重新排序会更改输出,您就是在玩火。这是一个带有该更改的示例:onlinegdb.com/XOMzDDI8f -
@JerryJeremiah 这是我的错误,我写了 { _a = a, _b = 5; } 而不是 { _a = a, _b = 5; },我想要做的是将成员 B::_a 复制到 D::_a 和 C::_b 到 D::_b
标签: c++ class inheritance