Oto przykład kodu, który mnie denerwuje:Jak uzyskać dostęp do metody chronionej w klasie bazowej z klasy pochodnej?
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' */
}
};
Jak uzyskać dostęp do chronionego funkcją overrided?
Dzięki za pomoc. : o)
Nie sądzę, że twoja implementacja jest całkiem poprawna. Dlaczego masz instancję Base jako zmienną składową? ten-> b-> foo() będzie próbował wywołać czystą wirtualną metodę. – GWW
Ten program nie powinien się kompilować. Nie można utworzyć instancji klasy abstrakcyjnej ... chyba że 'b' wskazuje na instancję innej klasy pochodnej' Base'. – 341008
Pominięto precyzję: atrybut Derived :: b służy do przechowywania instancji klas pochodnych z bazy –