首先,我将向您展示一些类(class)。
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();
我的应用程序需要这样的结构。 当我执行 callSomething() 时,它调用 B 的 call() 但是当 B 的 call() 将“某物”更改为 C 时,C 的 call() 被触发,我想避免这种情况。我该怎么办?
最佳答案
除了设计决策(例如,循环依赖)...
A 的 callSomething() 方法会从指向 B 的指针调用 C 的 call() 方法的唯一原因是 call() 方法是虚拟的。为了避免调用 C 的 call() 方法,这里有几个选项:
- 不要使 call() 方法成为虚拟的
- 重命名 B 或 C 的 call() 方法之一(优先于第一个选项)
- 显式调用 B 的 call() 方法
显式调用 B 的 call() 方法:
void callSomething(void) {
something->B::call();
}
关于c++ - 指向类和函数的指针 - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059782/