5
class A
{
protected:
    int m_a;
    int m_b;
};

class B: public A
{
};

m_aクラスBではプライベートにしたいです。それを行うために次の正しい方法を行いますか

class B:public A
{    
private:
    int m_a;
};

これは2つのコピーになりm_aませんか?

4

3 に答える 3

5

メンバーのアクセス制御を調整する正しい方法は、using宣言を使用することです。

class B: public A {    
private:
    using A::m_a;
}

書くint m_a;だけで実際にのコピーが2つになり、派生クラスはを書くことでのコピーm_aにアクセスできます。Am_aA::m_a

于 2012-09-20T10:46:12.647 に答える
2

に。m_a_ これは別のデータメンバーであるため、クラスBには実際には3つの:、、 およびがあります。にプライベートアクセスを取得する方法は、でプライベートに「使用」することです。class B class AintsA::m_aA::m_bB::m_am_aBA::m_aclass B

class A {
  int m_a;
};

class B:  public A {    
    using A::m_a;
};

class C : public B {
  void foo() { 
    m_a++; // ERROR!
  }
};
于 2012-09-20T10:43:20.500 に答える
0

このコードは、クラスBに3つのintストレージを作成します。

m_aの宣言は新しい変数を作成します-宣言は異なるスコープにあるため、ここではc ++で再宣言の問題はありません。より具体的には、A::m_aはB::m_aと同じではありません。

于 2012-09-20T10:46:22.100 に答える