class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
そこで何が起こるの?変数はマージされますか? B::var = 2 など、特定のものを呼び出すことはできますか?
class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
そこで何が起こるの?変数はマージされますか? B::var = 2 など、特定のものを呼び出すことはできますか?
クラスCには と の 2 つの変数がB::varありA::varます。あなたの外では、Cこのようにそれらにアクセスできます(に変更した場合public:)、
C c;
c.A::var = 2;
名前が のフィールドはなく、 と のみであるため、アクセスしようとするc.varとエラーが発生します。varA::varB::var
内部Cでは、名前A::varとB::var.
A::varおよびB::varそれぞれによって、クラス C でそれらにアクセスできます。
これは、同じ問題をカバーするリンクです。
var内部ののみを参照する場合、コンパイラは、またはCを意味するかどうかを認識せず、コンパイラはあいまいであると通知します。したがって、 を使用するときは、名前を完全修飾する必要があります。A::varB::varvarvar
マージは行われず、 のインスタンスにCは両方の変数が含まれます。