Поскольку C ++ допускает множественное наследование и поскольку интерфейс является абстрактным классом, в котором все его члены также являются абстрактными / виртуальными, C ++ не нуждается в этом - класс может просто «расширять» несколько других классов, любой из которых может быть чисто виртуальный (аннотация).
Java и C #, с другой стороны, не допускают MI, поскольку разработчики этих языков чувствовали, что MI создает больше проблем, чем решает. Но все же необходимо, чтобы объект «был» многими вещами (ООП - это отношение), поэтому интерфейсы предоставляют механизм, который позволяет объекту быть многими вещами, не наследуя несколько реализаций - сохраняя ребенка, но выбрасывая вода в ванне.