c++ - 指向类和函数的指针 - 问题

标签 c++ oop class-design

首先,我将向您展示一些类(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/

相关文章:

c# - 重构类设计,传达设计意图

php - 具有不同数量参数的子类构造函数

C++在网格图中表示相机覆盖区域的最有效方法

c# - 如果虚方法被声明为抽象的

c++ - 设计 : GraphicManager, TexturesPool,纹理

python - 如何在类中移动此方法装饰器模式?

c++ - 类互动技巧

c++ - 在 Xcode 中使用 IBPP

c++ - 无法将模板子类转换为不同的模板实例

c++ - 将无符号变量的差异存储到有符号变量中