【发布时间】:2021-05-18 15:49:12
【问题描述】:
我有以下课程:
class ServoPart {
protected:
virtual void doJob(byte* job) = 0;
private:
bool moving;
Servo servo;
};
// the following classes only have a constructor so I can use two ServoParts to inherit from
class Major: public ServoPart {};
class Minor: public ServoPart {};
class Arm: public Major, public Minor {
private:
void move() {
// do stuff
if (target == current) {
moving = false;
}
};
public:
void doJob(byte* job) {/* do stuff */};
};
我不能使用虚拟继承(我认为),因为 Major 和 Minor 需要分别控制一个伺服,这不能相同。但是,当 Arm 完成移动时,它应该将 moving 成员设置为 false。当我输入 moving 时,Intellisense 显示 ServoPart::moving。
moving 的访问是否会产生歧义?如果是,我该如何解决这个问题?我对虚拟继承的假设是否因为我有两个不同的伺服系统而无法使用它,对吗?
【问题讨论】:
-
看起来是考虑组合而不是继承的好时机。
-
继承在这里感觉不是正确的方法,我会考虑组合
-
@user4581301 我使用了“is a”与“has a”的方法:手臂 is a 伺服部分,包含两个伺服。我想现在我将为主要和次要存储
moving状态,并在检查状态时将它们结合起来。如果我继续遇到这样的问题,我会重新考虑 -
re
doJob我再次更新了我的答案。具有虚拟功能是改变性质的重要信息。注意不要过度简化示例代码! -
@JDługosz 是的,我现在可以看到了。我会记住以后的问题。谢谢!
标签: c++ multiple-inheritance ambiguous virtual-inheritance