In order to have better maintainability and optimum performance, how many levels of inheritance do you recommend ?
Performance is not affected by the depth of inheritance. The runtime system doesn't know whether a give object is inherited from one base class or a tree of five consecutive base classes, unless you're using dynamic_cast or some other explicit runtime type inquiry constructs. Therefore, the depth of inheritance is a function of design and maintainability. My advice is not to exceed five levels of inheritance at most because otherwise, readers can easily get lost in the class hierarchy and miss the differences among the levels of inheritance. Note also that from a maintenance point of view, too deep inheritance can cause problems when one of the base classes is modified and the modification propagates to the entire inheritance chain. If you have only few derived classes, adjusting them to cope with the modification isn't too difficult but when you have hundreds of classes that are ultimately derived from a common base that was changed, this is a serious maintenance problem.