次のレイアウトを想定しています。
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::Derived' を生成しました [using Base::Base 行を指しています]
'Derived' の宣言を参照してください
つまり、継承されたコンストラクターの上のアクセス修飾子を無視しています。
これは機能の制限ですか? Base
直接インスタンス化できないため (純粋仮想メソッドのため) 、クラスが public コンストラクターを持っていても意味がありません。