Access restrictions do not affect inheritance. You always inherit everything from all base classes. In your case, this may seem unnecessary, but consider a slightly modified version where a private function is virtual:
class Base { virtual void secret_power() { } public: void use_me() { secret_power(); } }; class Derived : public Base { virtual void secret_power() { } };
Now for any Base& you can always call not use_me() public virtual interface, but your derived classes provide implementation using virtual virtual.
source share