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).