Множественное наследование создает больше проблем, чем решает их. Интерфейсы в виде абстрактных базовых классов в C++ пример благоразумного использования множественного наследования.
Часто вам нужна композиция, когда вы думаете, что вам нужно множественное наследование.
В Java были введены интерфейсы, чтобы заменить множественное наследование.
В C++ можно унаследовать интерфейс и имплементацию вместе (public inheritance) либо можно унаследовать только имплементацию (private inheritance). В Java можно унаследовать только итерфейс без имплементации.
Определение абстрактного класса в стандарте C++, 13.4.2:
Абстрактный класс это класс который может быть использован только как базовый класс для другого класса; не может быть создано объектов абстрактного класса, за исключением подобъектов производных классов. Класс является абстрактным, если он имеет хотя бы одну чистую виртуальную функцию.