0

クラス C があり、クラス A とクラス B から継承しています。この継承を使用して、クラス A がクラス B 関数 (例: fun1() ) にアクセスすることは可能ですか? A と B はどちらも独立したクラスであり、fun1() はクラス B のみにあります。

4

3 に答える 3

1

厳密には継承ではありません。A と B は C の親ですが、A と B には関係がなく、相互にアクセスする方法もありません。

継承とポリモーフィズムによって可能であり、クラス A には、次のように、C が B で関数を呼び出すことを実装する仮想メソッドがあります。

class A {
public:
  b get_b() { return do_get_b(); }
private:
  virtual do_get_b() = 0;
};

class B {
public:
  b some_b;
};   

class C : public A, public B {
private:
  virtual do_get_b() {return some_b;}
}
于 2012-04-25T06:45:49.210 に答える
1

dynamic_cast を使用して、A のオブジェクトが本当に C のオブジェクトであるかどうか、したがって B のオブジェクトであるかどうかを確認できます。

void A::foo()
{
    B* pB = dynamic_cast<B*>(this);
    if (pB) pB->bar();
}

しかし、A と B が本当に互いに独立している場合は、おそらく別の解決策を見つけた方がよいでしょう。

于 2012-04-25T07:01:42.713 に答える
0

場合によっては可能です。これを達成する方法の例。

この例は、あなたのものよりも少し複雑なダイヤモンド階層に適用されます。あなたの言葉では、ClassA と ClassB はクラス Base から派生する必要があり、ClassC は ClassA と ClassB から派生する必要があります。

于 2012-04-25T06:41:01.527 に答える