Very subject to critcism and not commonly used or recomended, C++ had the rich feature of supporting multiple inheritence so there is no need to go a step back or a step aside and yet introduce interfaces [and probably rename the language C+-].
Any one who has ever succeeded in developing a concrete application using multiple inheritence can name a lot of drawbacks in using interfaces to acheive same functionality. Like in the case of c#, the need to define interface members (i.e. overriding functions) in every class that implements the interface. For 100 such classes implementing an interface, 100 seperate implementations for each method, required. At least multiple inheritence can reduce the number of override(d/n) functions to ensure some code reuse. If somehow interfaces are not limited to abstract definitions,......
People criticize C++ for multiple inheritence, which doesn't mean it is bad. However, in many cases it is either poorly understood or otherwise misued. MI almost always obfuscates the design and introduces maintenance issues. This is one of the reasons why it is usually better to aggregate functionality through composition than to inherit it. However, this is beside the point.Interface design is not direclty related to inheritence. Interface design is about contract definition and abstraction from the client objects (decoupling). This leads to easier replacement and reuse.Inheritence is about reuse within the server objects. Both can lead to polymorphism, but interfaces do not have the rest of the inheritance baggage to carry along (which multiple inheritence was implemented to avoid). But since MI leads to complexity, it didn't work out too well.I think Interface based design is just now being recognized as a very strong reuse mechanism, and this presentation helps to make that point.