This is the Non-Virtual Interface Idiom (NVI). That page by Herb Sutter has a good bit of detail about it. However, temper what you read there with what the C++ FAQ Lite says here and here.
The primary advantage of NVI is separating interface from implementation. A base class can implement a generic algorithm and present it to the world while its subclasses can implement the details of the algorithm through virtual functions. Outside users are shielded from changes in the algorithm details, especially if you later decide you want to do add pre- and post-processing code.
The obvious disadvantage is that you have to write extra code. Also, private
virtual functions are confusing to a lot of people. Many coders mistakenly think you can't override them. Herb Sutter seems to like private
virtuals, but IMHO it's more effective in practice to follow the C++ FAQ Lite's recommendation and make them protected
.