从父类调用方法

时间:2012-04-18 08:30:32

标签: c++

首先:我知道我的问题不是关于父类,但我不知道如何调用这个结构,我认为父母最容易描述它。

我有两个类定义如下:

class class_a {
    void foo() {
        //stuff
    }
};

class class_b {
    class_a A;
    void foo() {
        //more stuff
    }
};

我想要class_b :: foo();在class_a :: foo()中满足某些要求时调用;可以在class_a中设置一个变量,并在class_b :: foo()中检查它。但我想知道是否有更优雅的解决方案。

注意:class_b是并且不能从class_a派生。

3 个答案:

答案 0 :(得分:1)

我不确定我完全理解你想要做什么,一个更具体的例子会有所帮助,但也许这可以做你想要的:

class class_b;

class class_a {
    void foo(class_b* b);
};

class class_b {
    class_a A;
    void foo() {
        A.foo(this);
    }
    void foo_impl() {
        // stuff based on requirements in a::foo
    }
};

void class_a::foo(class_b* b) {
    //stuff
    if (conditionsMet()) {
        b->foo_impl();
    }
}

答案 1 :(得分:0)

你可以做的一件事是创建一个抽象这种行为的第三个类,无论它是从两者派生的,还是仅仅是独立的。

答案 2 :(得分:0)

对于术语,class_b 包含,或拥有 class_a的实例。

要从class_b::foo致电class_a::foo,您需要将class_b的实例提供给class_a::foo。这可以通过向你提到的class_a添加成员变量,或者class_a::foo的参数来实现(两者都在两个类之间创建循环依赖,这是更好的避免 - 你应该重新考虑你的设计)。或者通过全局变量(通常也不建议使用,因为它很难跟随控制流程,单元测试等)。