Comment accéder à la méthode protégée dans la classe de base de la classe dérivée?

Voici un exemple de code qui m'agace:

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' */
    }
};

Comment avez-vous accès à l'protégé surdéfini fonction?

Merci pour votre aide. :o)

Je ne pense pas que votre mise en œuvre est tout à fait juste. Pourquoi avez-vous un exemple de Base comme une variable de membre? this->b->foo() serait d'essayer d'appeler une méthode virtuelle pure.
Ce programme ne devrait pas compiler. Vous ne peut pas instancier une classe abstraite....Sauf b vers une instance d'une autre classe dérivée de Base.
J'ai omis de précision: la Dérivée::b attribut est conçu pour stocker toutes les instances de classes dérivées à partir de la Base de
Voir aussi stackoverflow.com/questions/3247671/... (c'est à propos des membres au lieu de méthodes, mais ils ne sont pas très différents)
C++ appelle des fonctions de membre, pas de méthodes (bien que certaines personnes utiliser ce dernier, mais dans mon expérience que mène juste à des arguments linguistiques), et les concepts sont les mêmes pour les fonctions de membre et de membre des variables, donc: double de Accéder aux membres protégés dans une classe dérivée

OriginalL'auteur Bernard Rosset | 2011-01-12