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