class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
ここではどうなりますか?変数はマージされますか?私はB :: var = 2などのようなもので電話することができますか?C++同じ変数名を持つ複数の親変数
class A{
protected:
int var;
};
class B{
protected:
int var;
};
class C : public A, public B {};
ここではどうなりますか?変数はマージされますか?私はB :: var = 2などのようなもので電話することができますか?C++同じ変数名を持つ複数の親変数
クラスC
には、B::var
とA::var
という2つの変数があります。名前var
、唯一A::var
とB::var
とはフィールドが存在しないためC
の外では、あなたは、エラーにつながるアクセスc.var
しようと、
C c;
c.A::var = 2;
(あなたがpublic:
に変更した場合)、このようにそれらにアクセスすることができます。
内側C
これらは、通常のフィールドのように振る舞い、再びA::var
とB::var
の名前で動作します。
クラスCではA::var
とB::var
でそれぞれアクセスできます。
Hereは、同じ問題をカバーするリンクです。あなただけC
の内側var
を参照している場合
、コンパイラはあなたがA::var
やB::var
を意味するかどうかを知らないと、コンパイラはvar
があいまいであることを教えてくれます。したがって、var
を使用する場合は、名前を完全修飾する必要があります。
マージは行われません。C
のインスタンスには両方の変数が含まれます。
提案した構文( 'B :: var')を試してみましたか?それは正しいことが起こる! –