As you know, separate language tools for declaring interfaces in C ++, and their role can be performed by abstract classes. But from an ideological point of view, interfaces and abstract classes are quite different entities. Interfaces describe a contract of how to interact with a class. Abstract classes are the root of the class hierarchy, used for polymorphism in the spirit of
AbstractSuperClass* a = new SubClass; and can simply implement common functionality.
Is it necessary, programming in C ++, to separate these concepts and write interfaces, as in Java / C #? Or you can (need?) Mix and use only abstract classes?