私は、クラスCを持っており、それは、クラスAとクラスB から継承していること(例えばFUN1())これを使用して、アクセスクラスBの関数にクラスAのために、それは可能です継承。 AとBは両方とも独立したクラスで、fun1()はBクラスにのみあります。複数の継承。別の親クラスに1つの親クラスのメンバ関数にアクセスする方法
0
A
答えて
1
厳密には継承ではありません。 AとBはCの親であるが、AとBは関係がなく、互いにアクセスすることはできない。
それは、クラスAは、Cはこのように、Bに関数を呼び出す実装仮想メソッド持ち、継承とpolimorphismを通して可能です:
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;}
}
0
時には可能です。 An example how to achieve this.
その例は、もう少しあなたより複雑であるダイヤモンドの階層に適用されます。あなたの条件では、ClassAとClassBはBaseクラスから派生し、ClassCはClassAとClassBから派生します。
0
あなたはAのあなたの対象かどうかを確認するためのdynamic_castに確認してくださいでした本当にCのオブジェクトであり、それによってB
void A::foo()
{
B* pB = dynamic_cast<B*>(this);
if (pB) pB->bar();
}
のしかし、AとBは、互いに本当に独立している場合には、別の解決策を見つけるために、おそらくより良いです。
あなたの素晴らしいansをありがとう。しかし、わかりませんでした。クラスBの中では "b some_b"とはどういう意味ですか?クラスAの中のY "b get_b()"が実装されています。 – Sijith
b some_bは、b型の「some_b」という名前のメンバ変数です。 – daramarak