从父类调用方法

calling method from parent class

本文关键字:方法 调用 父类      更新时间:2023-10-16

第一:我知道我的问题不是关于父类的,但我不知道这种结构是如何称呼的,我认为父是最容易描述的。

我有两个类定义如下:

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派生。

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

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();
    }
}

您可以做的一件事是创建第三个类来抽象此行为,无论它来自两者,还是只是独立的。

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

要从 class_a::foo 调用class_b::foo,您需要使class_b的实例可供class_a::foo使用。这可以通过将成员变量添加到class_a来实现,如您所指出的,或者向class_a::foo添加一个参数(两者都在两个类之间创建循环依赖关系,最好避免这种情况 - 您应该重新考虑您的设计)。或者通过全局变量(通常也不建议这样做,因为它很难遵循控制流,单元测试等)。