2012-09-03 20 views
8
class A{ 
    protected: 
    int var; 
}; 

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

ここではどうなりますか?変数はマージされますか?私はB :: var = 2などのようなもので電話することができますか?C++同じ変数名を持つ複数の親変数

+2

提案した構文( 'B :: var')を試してみましたか?それは正しいことが起こる! –

答えて

10

クラスCには、B::varA::varという2つの変数があります。名前var、唯一A::varB::varとはフィールドが存在しないためCの外では、あなたは、エラーにつながるアクセスc.varしようと、

C c; 
c.A::var = 2; 

(あなたがpublic:に変更した場合)、このようにそれらにアクセスすることができます。

内側Cこれらは、通常のフィールドのように振る舞い、再びA::varB::varの名前で動作します。

1

クラスCではA::varB::varでそれぞれアクセスできます。

Hereは、同じ問題をカバーするリンクです。あなただけCの内側varを参照している場合

2

、コンパイラはあなたがA::varB::varを意味するかどうかを知らないと、コンパイラはvarがあいまいであることを教えてくれます。したがって、varを使用する場合は、名前を完全修飾する必要があります。

マージは行われません。Cのインスタンスには両方の変数が含まれます。

関連する問題