The non-virtual-interface pattern is the use of an abstract-base-class with public non-virtual functions that delegate to (pure) virtual functions that can be overridden by derived classes.
The advantages are that the base class is in full control. It can add pre- and postcondition checking, or separate processing into more steps, or refactor, or implement a fuller interface/implementation separation using the Pimpl idiom. The non-virtual-interface acts similarly to the Template Method pattern.