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önnenDerived
ist 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.