c++中私有基类的可访问性
Private base class accessibility in C++
我最近不得不做这样的事情:
class A { };
class B : private A { };
class C : public B {
public:
A *myA;
};
int main() {
return 0;
}
和我得到一个错误在三个编译器我尝试。当我把myA
的申报改成::A *myA
的时候,一切正常。我翻了翻c++标准,发现第11.2节第3段说:
注意:私有基类的成员可能不能作为继承的成员名访问,但可以直接访问。
这是相关的,但不清楚。为什么名称A
无法访问?如果不隐藏A
会出现什么问题?
谢谢,
本
可能出错的地方:
namespace nmsp
{
class A {};
}
class A {};
class B : private nmsp::A
{
// well-formed:
A* d; // refers to the injected-class-name nmsp::A!!
};
class C : public B
{
// ill-formed
A* p; // refers to the injected-class-name nmsp::A!!
};
使用::A
还是nmsp::A
不应该依赖于base子句中的访问说明符,否则容易出错IMO
相关文章:
- 为什么此派生对象无法访问基类的后递减方法?
- 无法访问基类函数 C++
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 如何从派生类访问基类中的重载运算符?
- 派生类无法访问基类的受保护成员
- 我不能访问基类的函数
- 无法在赋值运算符中访问基类的受保护方法
- 访问基类中直接受保护的字段
- 使用单一实例类作为派生类时,如何访问基类中的函数
- 为什么无法访问基类的函数重载
- 访问基类的受保护成员
- 访问基类C 中的变量
- 尝试访问基类的受保护数据成员时出现编译错误
- 允许从特定派生类访问基类成员
- 如何通过派生类访问基类的受保护成员?
- 在派生的C 类中,访问基类受保护成员作为公共的访问声明
- C++派生类访问基类成员
- 虚函数可以访问基类的友元吗?
- 使用派生模板化类的正确类型转换访问基类中的数据