2

2つのクラスがあるとします。

struct a
{
    void test();
};

struct b
{
    void test();
};

次に、これらのクラスから継承しましょう。

class c : public a, public b
{
};

とは同じ関数を持っているので、呼び出すc::test()とエラーが発生します。私の質問です。class aclass bvoid test()

それらの(非仮想!)関数を継承することは可能c::test()ですか?呼び出されると両方が実行されますか?

4

2 に答える 2

4

これを行うには、で実装void test()c、両方のメソッドを呼び出す必要があります。それを自動的に行う方法はありません。

class c : public a, public b
{
public:
    void test() {
        a::test();
        b::test();
    }
}

ただし、派生クラスで非仮想関数を再実装することは強くお勧めしません。問題は、同じオブジェクトで動作している場合でも、以下が静かに異なる関数を呼び出すことです。

   c* p1 = new c();
   a* p2 = p1;
   p1->test();
   p2->test();
于 2012-12-01T20:03:51.560 に答える
0

あなたの前提は間違っています。から継承し、エラーではありませんa。解決があいまいなため、b電話をかけようとするとエラーになります。ただし、たとえば明示的にとを呼び出すことで、好きなようにオーバーライドできc::test()ます。test()cthis->a::test();this->b::test();void c::test();

于 2012-12-01T20:08:23.187 に答える