Example from Meyers “Effective C++”
class Timer {
public:
explicit Timer(int tickFrequency);
virtual void onTick() const; // Called automatically for each tic,
// onTick() must be redefined to do things
...
};
class Widget: private Timer { // private inheritance
private:
virtual void onTick() const; // redefined to make job done
...
};
Now clients of Widget get interface untouched and required job is done
Example of protecting method from redefinition in derived classes:
class Widget {
private:
class WidgetTimer: public Timer {
public:
virtual void onTick() const;
...
};
WidgetTimer timer;
...
};
Classes derived from Widget unable to redefine onClick. Analogue of final in Java and sealed in C#