Ecco un esempio di codice che mi infastidisce:Come accedere al metodo protetto nella classe base dalla classe derivata?
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' */
}
};
Come si accede alla funzione overrided protetta?
Grazie per il vostro aiuto. : o)
Non penso che la vostra implementazione sia giusta. Perché hai un'istanza di Base come variabile membro? questo-> b-> pippo() proverebbe a chiamare un metodo virtuale puro. – GWW
Questo programma non dovrebbe essere compilato. Non è possibile creare un'istanza di una classe astratta .... A meno che 'b' stia puntando a un'istanza di un'altra classe derivata da' Base'. – 341008
Ho omesso precisione: l'attributo Derived :: b è inteso per memorizzare qualsiasi istanza di classi derivate da Base –