0
私はC++プログラムを書いています。ハイブリッド継承の派生クラスから基本クラスの変数へのアクセス
#include <iostream>
#include <string>
using namespace std;
class A
{
int a;
public:
void read()
{
cin>>a;
}
};
class B:public A
{
public:
B()
{ }
};
class C:public A
{
public:
C()
{}
};
class D:public B,public C
{
public:
void display()
{
cout<<a<<endl;
}
};
void main()
{
A a1;B b1;C c1;
D d1;
d1.display();
}
曖昧さがあるというメッセージが表示されます。 BはAを継承しているので、BクラスはクラスAからアイテム 'a'を継承します。また、CクラスはクラスAからアイテム 'a'を継承します。今、クラスDのBクラスとCクラスの両方を継承しようとすると、 'a'にアクセスできますか?クラスBからまたはクラスCからあいまいさを取り除く方法はありますか?
"どのアイテムにもアクセスできるようになります" - *どちらの*でも、あなたは今やっている方法ではありません。 1つを選択し、 'BaseClassName :: a 'で指定します。しかし、どういうわけか、私はそれがあなたが本当に望んでいるものであると疑う。私はバーチャルベースのダイヤモンドの継承は、あなたが求めるものだと思う。 (そしてそこに、Googleとヒットするいくつかのキーワード)。 – WhozCraig
これは[恐怖の菱形](https://isocpp.org/wiki/faq/multiple-inheritance#mi-diamond)と呼ばれることがあります。 – callyalater