Implementation of two different strategies for calculation of search length.

Hierarchy is fine. For me it looks odd that the base class has `_search_length` while `getSearchLength()` is a pure virtual function. You wrote that you had to do it because you want the class to be an abstract class.  For that purpose, I'd suggest make a destructor in the base class being pure virtual instead of getSearchLength.