42

假设以下布局:

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's 的构造函数指定为 public 吗?VC++ 给出以下错误:

无法访问在类 'Derived' 中声明的受保护成员
编译器在此处生成了 'Derived::Derived' [指向 using Base::Base 行]
请参阅'Derived' 的声明

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

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

4

1 回答 1

34

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

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

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

于 2014-01-09T09:23:10.293 回答