使其中一个继承的受保护成员成为私有

时间:2012-09-20 10:41:28

标签: c++ inheritance

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

class B: public A
{
};

在B班,我想让m_a私密。 以下是正确的方法吗

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

这不会导致m_a的两份副本吗?

3 个答案:

答案 0 :(得分:5)

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

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

只需撰写int m_a;确实会产生m_a的两个副本,派生类就能够访问A的{​​{1}}副本写m_a

答案 1 :(得分:2)

m_a {strong}阴影中的class B <{1}}。它是一个不同的数据成员,因此B类实际上有三个class AintsA::m_aA::m_b。在B::m_a中私有访问m_a的方法是在B中私下“使用”A::m_a

class B

答案 2 :(得分:0)

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

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