Wie für den Zugriff auf geschützte Methode in der Basisklasse von der abgeleiteten Klasse?

Hier ist ein Beispiel des Codes, das mich ärgert:

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

Wie Sie Zugang zu den geschützten overrided Funktion?

Vielen Dank für Ihre Hilfe. :o)

  • Ich glaube nicht, dass deine Umsetzung ist ganz richtig. Warum muss man eine Instanz der Basis, wie eine member-variable ist? dieser->b->foo() würde versuchen, rufen Sie eine rein virtuelle Methode.
  • Dieses Programm sollte nicht kompilieren. Sie kann nicht instanziiert werden eine abstrakte Klasse....Es sei denn b verweist auf eine Instanz von einer anderen Klasse abgeleitet aus Base.
  • Ich ausgelassen Präzision: Abgeleitet::b Attribut ist vorgesehen zum speichern einer beliebigen Instanz der abgeleiteten Klassen von der Basis
  • Siehe auch stackoverflow.com/questions/3247671/... (das ist über die Mitglieder anstelle von Methoden, aber Sie sind nicht sehr unterschiedlich)
  • C++ ruft Sie member-Funktionen, nicht Methoden (obwohl einige Leute benutzen den letzteren, aber in meiner Erfahrung, dass führt nur zu sprachlichen Argumente), und die Konzepte sind die gleichen für die member-Funktionen und member-Variablen, also: kopieren Sie der Zugriff auf protected-member in einer abgeleiteten Klasse
Schreibe einen Kommentar