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
とエラーが発生します。var
A::var
B::var
内部C
では、名前A::var
とB::var
.
A::var
およびB::var
それぞれによって、クラス C でそれらにアクセスできます。
これは、同じ問題をカバーするリンクです。
var
内部ののみを参照する場合、コンパイラは、またはC
を意味するかどうかを認識せず、コンパイラはあいまいであると通知します。したがって、 を使用するときは、名前を完全修飾する必要があります。A::var
B::var
var
var
マージは行われず、 のインスタンスにC
は両方の変数が含まれます。