However, I want to recommend you 2 things:
1. Using multiple inheritance to define an interface a class shall support (by
inheriting from a class that contains only pure abstract methods) is harmless
and very useful. This corresponds to Java "interfaces", which are known to
work well. If you want to see this technique applied in C++, look at the KDE
code, they use it a lot.
2. If the superclass you inherit from does not contain only pure abstract
functions, then you should avoid having cycles in your inheritance graph.
This situation
supersuperclass
superclass1 superclass2
subclass
(that is: subclass inherits from superclass1 and superclass2, which both
inherit from supersuperclass) can be error prone if superclass1 and
superclass2 access members from supersuperclass. But again, if you specify
clear constrains to work around this, use it. But I'd first try to find a
design that doesn't have to use this feature.