假设以下布局:
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
的构造函数指定为公共的?VC++会给出以下错误:
无法访问类'Derived'中声明的受保护成员
编译器已在此处生成 'Derived::Derived' [指向using Base :: Base行]
请参阅 'Derived' 的声明
也就是说,它忽略了继承构造函数上面的访问修饰符。
这是该特性的限制吗?对于Base
类具有公共构造函数没有任何意义,因为它永远不能直接实例化(由于纯虚方法)。