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

时间:2010-01-13 19:58:10

标签: c++ oop class-design

首先,我会向你展示几节课。

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的调用()被触发,我想避免这种情况。我该怎么办?

1 个答案:

答案 0 :(得分:1)

除了设计决策(例如,周期性依赖性)......

A的callSomething()方法从指针B调用C的call()方法的唯一原因是call()方法是虚拟的。为了避免调用C的call()方法,这里有几个选项:

  • 不要将call()方法设为虚拟
  • 重命名B或C的call()方法之一(优先于第一个选项)
  • 明确调用B的call()方法

明确调用B的call()方法:

void callSomething(void) {
    something->B::call();
}