C ++ 11继承构造函数和访问修饰符

时间:2014-01-09 09:13:46

标签: c++ visual-c++ c++11 inheriting-constructors

假设以下布局:

class Base
{
protected:
    Base(P1 p1, P2 p2, P3 p3);

public:
    virtual void SomeMethod() = 0;
}

class Derived : public Base
{
public:
    using Base::Base;

public:
    virtual void SomeMethod() override;
};

我是否可以将Derived的构造函数指定为public? VC ++给出以下错误:

  

无法访问“派生”类中声明的受保护成员   编译器在这里生成'Derived :: Derived'[指向使用Base :: Base   线]
  见'衍生'的声明

即。它忽略了继承构造函数上方的访问修饰符。

这是该功能的限制吗? Base类具有公共构造函数没有任何意义,因为它永远不能直接实例化(由于纯虚方法)。

1 个答案:

答案 0 :(得分:28)

根据12.9 / 4,“继承构造函数”,在说using X::X时,

  

如此声明的构造函数具有与X中相应构造函数相同的访问权限。

所以继承的构造函数也是protected

相关问题