class A : public Interface
{
public:
void doAction();
void interfaceMethod1();
...
}
class AExt
{
public:
void doAction();
private:
int m_state;
}
我有A类,它可以执行doAction()并实现接口(接口不包括doAction)。 A工作正常,所以我想最小化A中的变化。现在我想添加新状态并创建类AExt,现在负责制作doAction(),它改变状态,现在取决于状态。目标是限制doAction(),以便它只能被AExt调用,因为不是从AExt调用A :: doAction会破坏功能。同时,AExt仅使用A的公共接口。
我可以使用如下组成 但这不会阻止从外部调用A :: doAction()。
class AExt
{
public:
void doAction() { m_a.doAction(); ... }
A& getA() { return m_a; }
}
建议?
答案 0 :(得分:3)
Vlad,C ++没有提供您想要的精细粒度。你的方法1-4基本上是正确的。尝试将这些精细的细节添加到C ++中将导致更复杂的语言。有人说C ++已经太复杂了。这意味着语言设计是表达能力与保持合理简单的愿望之间的交易。
我会声明你的doAction();
受保护。这将禁止从任意一段代码中调用它。与此同时,AExt
似乎是你自己的班级。如果它能够完全访问其父级,那么它可能并不是那么糟糕。从各方面来看,这种解决方案并不完美。它的主要优点是简单。我建议你在没有充分理由的情况下不要使代码过于复杂。代码的简单性和清晰度也很重要。