13
class A{
    protected:
    int var;
};

class B{
    protected:
    int var;
};

class C : public A, public B {};

そこで何が起こるの?変数はマージされますか? B::var = 2 など、特定のものを呼び出すことはできますか?

4

3 に答える 3

15

クラスCには と の 2 つの変数がB::varありA::varます。あなたの外では、Cこのようにそれらにアクセスできます(に変更した場合public:)、

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

名前が のフィールドはなく、 と のみであるため、アクセスしようとするc.varとエラーが発生します。varA::varB::var

内部Cでは、名前A::varB::var.

于 2012-09-03T23:40:31.960 に答える
2

A::varおよびB::varそれぞれによって、クラス C でそれらにアクセスできます。

これは、同じ問題をカバーするリンクです。

于 2012-09-03T23:39:56.300 に答える
2

var内部ののみを参照する場合、コンパイラは、またはCを意味するかどうかを認識せず、コンパイラはあいまいであると通知します。したがって、 を使用するときは、名前を完全修飾する必要があります。A::varB::varvarvar

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

于 2012-09-03T23:40:07.433 に答える