首先,我会向你展示几节课。
class A {
public:
B * something;
void callSomething(void) {
something->call();
}
};
class B {
public:
A * activeParent;
B(A * parent) {
activeParent = parent;
}
void call(void) {
activeParent->something = new C;
}
};
class C : public B {
public:
A * activeParent;
C(A * parent) {
activeParent = parent;
}
void call(void) {
// do something
}
};
A * object;
object = new A;
object->something = new B;
object->callSomething();
我的应用需要这样的结构。 当我调用Something()时,它会调用B的调用(),但是当B的调用()将“某事”更改为C时,C的调用()被触发,我想避免这种情况。我该怎么办?
答案 0 :(得分:1)
除了设计决策(例如,周期性依赖性)......
A的callSomething()方法从指针B调用C的call()方法的唯一原因是call()方法是虚拟的。为了避免调用C的call()方法,这里有几个选项:
明确调用B的call()方法:
void callSomething(void) {
something->B::call();
}