来自父类的调用方法

问题描述:

第一:我知道我的问题不是关于父类,而是我不知道如何调用这个结构,我认为父类最容易描述它。来自父类的调用方法

我有这样定义了两个类:)

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

+1

为什么不直接使用class_b局部变量FOO ::( )? – 2012-04-18 08:34:18

+1

根据“特定需求”存储函数指针怎么样? – Nick 2012-04-18 08:35:10

+2

虽然有解决方法来实现这种行为这闻起来像一个糟糕的设计..你真的想做什么? – 2012-04-18 08:39:25

不知道我完全理解你正在尝试做的,更具体的例子将是有益的,但也许这你想要做什么:

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

我认为最接近我想要达到的目标。谢谢 :) – Kevin 2012-04-18 09:08:58

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

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

若要从class_a::foo调用class_b::foo,则需要使class_b的实例可用于class_a::foo。这可以通过向你注意到的class_a添加一个成员变量来实现,或者通过class_a::foo(两者在两个类之间创建一个循环依赖关系,这样可以更好地避免 - 你应该重新考虑你的设计)的一个参数来实现。或者通过一个全局变量(这通常不被推荐,因为它很难遵循控制流程,进行单元测试等)。