visual una modificadores metodos instanciar hijo herencia derivada clases clase acceso c++ visual-c++ c++11 inheriting-constructors

una - C++ 11 heredando constructores y modificadores de acceso



modificadores de acceso java (1)

De acuerdo con 12.9 / 4, "Heredando constructores", al decir using X::X ,

Un constructor así declarado tiene el mismo acceso que el constructor correspondiente en X.

Entonces el constructor heredado también está protected .

Asumiendo el siguiente diseño:

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

¿Debo poder especificar el constructor de Derived como público aquí? VC ++ da el siguiente error:

no puede acceder al miembro protegido declarado en la clase ''Derivado''
el compilador ha generado ''Derived :: Derived'' aquí [señala el uso de la base :: línea base]
ver la declaración de ''Derivados''

es decir, está ignorando el modificador de acceso sobre el constructor heredado.

¿Es esto una limitación de la función? No tiene ningún sentido que la clase Base tenga un constructor público, ya que nunca se puede crear una instancia directamente (debido al método virtual puro).