如果'C'公开继承'B',B 私下继承'A',为什么我不能在"C"中创建"A"的对象?
If 'C' inherits from 'B' publicly, B inherits from 'A' privately, Why can't I create an object of 'A' inside 'C'?
我正在使用Visual C++,如果我编译以下代码:
class A {};
class B : private A {};
class C : public B
{
void func()
{
A a{};
}
};
我收到此错误:
错误 C2247:"A"不可访问,因为"B"使用"私有"进行继承 从"A">
我知道如果我使用私有继承,那么类"A"的成员在"B"中将是私有的,而在"C"中无法访问,但是为什么我不能在"C"中创建"A"的对象呢?
问题是 C 类范围内A
的名称是私有名称。
它是一个所谓的注入类名。
从C++标准(6.3.2声明点(
8 注入类名的声明要点(第12条(是 紧跟在类定义的左大括号之后。
使用以下方法,即使用限定名称
class A {};
class B : private A {};
class C : public B
{
void func()
{
::A a{};
//^^^^^^
}
};
相关文章:
- 如何创建从同一类继承的不同对象的向量
- 如果'C'公开继承'B',B 私下继承'A',为什么我不能在"C"中创建"A"的对象?
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 了解虚拟继承类 vtables 和 vptr 创建
- 如何从继承的父类创建unique_ptr
- 创建一个具有两个可能继承的类
- 如何创建一个继承自 std::vector 的类
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)
- 创建一系列超类的指针,以分配继承的类
- 如何创建从版本继承的CMAKE配置类型
- 动态创建一个继承的类,使用STD :: MAP使用基类指针访问
- 创建一个函数,该函数返回具有现有类继承的不同类型
- 如何允许一个类由另一个类创建而不使用'friend'但允许继承?
- 如何创建一个新类来继承 ostream 并将其用作 cout 但带有锁定
- 无法创建两个从 std::logic_error 继承的自定义异常类
- 如何在Qt Creator中从继承的类自动创建虚拟方法
- 在构造函数 QT 创建器(继承类)中传递默认参数
- 如果对象是堆栈创建的(包括继承的类型),是否可以发出编译错误
- C++使用模板和继承创建函数映射