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

class B: public A
{
};

在 B 类中,我想将其设为m_a私有。以下是正确的方法吗

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;确实会产生两个副本m_a,并且派生类将能够通过写入访问A的副本。m_aA::m_a

于 2012-09-20T10:46:12.647 回答
2

阴影中。m_a_ 它是一个不同的数据成员,因此B 类实际上有三个:和 。获得私人访问in的方法是“使用”私人 in :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 类中创建三个 int 存储。

m_a 的声明创建了一个新变量 - 这里在 c++ 中没有重新声明问题,因为声明在不同的范围内,更具体地说,A::m_a 与 B::m_a 不同。

于 2012-09-20T10:46:22.100 回答