Este es un ejemplo de código que me molesta:¿Cómo acceder al método protegido en la clase base de la clase derivada?
class Base {
protected:
virtual void foo() = 0;
};
class Derived : public Base {
private:
Base *b; /* Initialized by constructor, not shown here
Intended to store a pointer on an instance of any derived class of Base */
protected:
virtual void foo() { /* Some implementation */ };
virtual void foo2() {
this->b->foo(); /* Compilator sets an error: 'virtual void Base::foo() is protected' */
}
};
¿Cómo se accede a la función overrided protegida?
Gracias por su ayuda. : o)
No creo que su implementación sea correcta. ¿Por qué tienes una instancia de Base como variable miembro? this-> b-> foo() intentaría llamar a un método virtual puro. – GWW
Este programa no debe compilarse. No se puede crear una instancia de una clase abstracta ... a menos que 'b' apunte a una instancia de alguna otra clase derivada de' Base'. – 341008
Omití precisión: el atributo Derived :: b está destinado a almacenar cualquier instancia de clases derivadas de Base –