0

まず、私の質問は親クラスに関するものではないことは知っていますが、この構造がどのように呼び出されるかはわかりません。親が最も簡単に説明できると思いました。

私はこのように定義された2つのクラスを持っています:

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から派生するものであり、派生させることはできません。

4

3 に答える 3

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();
    }
}
于 2012-04-18T08:39:53.370 に答える
0

One thing you can do is create a third class that abstracts this behavior, whether it derives from both, or is just independent.

于 2012-04-18T08:35:37.687 に答える
0

For the terminology, class_b contains, or owns an instance of class_a.

For calling class_b::foo from class_a::foo, you need to make the instance of class_b available to class_a::foo. This can be achieved either by adding a member variable to class_a as you noted, or a parameter to class_a::foo (both of which creates a circular dependency between the two classes, which is better avoided - you should rather rethink your design). Or via a global variable (which is usually not recommended either, as it makes it hard to follow the flow of control, to unit test, etc.).

于 2012-04-18T08:36:08.380 に答える