Here is a sample of code that annoys me:
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' */
}
};
How do you access to the protected overrided function?
Thanks for your help. :o)
Protected members in a base-class are only accessible by the current object.
Thus, you are allowed to call
this->foo(), but you are not allowed to callthis->b->foo(). This is independent of whetherDerivedprovides an implementation forfooor not.The reason behind this restriction is that it would otherwise be very easy to circumvent protected access. You just create a class like
Derived, and suddenly you also have access to parts of other classes (likeOtherDerived) that were supposed to be inaccessible to outsiders.