将继承的受保护成员之一设为私有
Making one of the inherited protected members private
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
来访问A
的m_a
副本。
class B
阴影中的m_a
class A
的阴影。它是一个不同的数据成员,所以类B实际上有三个ints
:A::m_a
、A::m_b
和B::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 不同。
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- 为什么继承的受保护构造函数不能公开?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 继承期间受保护成员的皮条
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- 在派生类中具有相同签名但继承为受保护的函数
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 使从一个基类派生的类能够使用继承的受保护成员
- 为什么继承的受保护操作员=()有公共访问权限
- C :可以从类及其受保护的成员类型继承可以继承吗?
- C++对已继承的受保护类成员的未定义引用
- 如何访问多个继承类中的受保护成员
- 用受保护的继承指向基类方法
- C 继承访问受保护的数据成员
- 受保护的方法在 c++ 中继承时可以成为私有方法
- 继承公共/受保护/私有构造函数
- 虚拟继承和受保护的成员访问
- 继承受保护的函数和公共变量C++时发生多重继承编译错误
- C++继承:受保护的变量不可用
- 模板类未从另一个模板类继承受保护的变量