C ++ 11, das Konstruktoren und Zugriffsmodifikatoren erbt

Angenommen, das folgende Layout:

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;
};

Sollte ich angeben könnenDerivedist hier der konstruktor als öffentlicher? VC ++ gibt den folgenden Fehler aus:

kann nicht auf geschütztes Mitglied zugreifen, das in der Klasse 'Derived' deklariert wurde
Der Compiler hat hier 'Derived :: Derived' generiert [verweist auf die using Base :: Base line]
siehe Deklaration von 'Derived'

Das heißt, der Zugriffsmodifikator über dem geerbten Konstruktor wird ignoriert.

Ist dies eine Einschränkung der Funktion? Es ergibt keinen Sinn für dieBase class muss einen öffentlichen Konstruktor haben, da dieser (aufgrund der rein virtuellen Methode) niemals direkt instanziiert werden kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage