将继承的受保护成员之一设为私有

Making one of the inherited protected members private

本文关键字:继承 受保护 成员      更新时间:2023-10-16
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吗?

调整成员访问控制的正确方法是使用 using 声明:

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

仅仅写int m_a;确实会产生两个m_a副本,一个派生类可以通过写A::m_a来访问Am_a副本。

class B阴影中的m_a class A的阴影。它是一个不同的数据成员,所以类B实际上有三个intsA::m_aA::m_bB::m_a。在B中获取对m_a的私有访问权限的方法是在class B中私下"使用"A::m_a

class A {
  int m_a;
};
class B:  public A {    
    using A::m_a;
};
class C : public B {
  void foo() { 
    m_a++; // ERROR!
  }
};

此代码在类 B 中创建三个 int 存储。

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