如您所知,在 C++ 中有用于声明接口的独立语言工具,它们的作用可以由抽象类来承担。但从意识形态的角度来看,接口和抽象类是截然不同的实体。接口描述了如何与类交互的契约。抽象类是类层次结构的根,用于本着多态性的精神
AbstractSuperClass* a = new SubClass;
并且可以简单地实现通用功能。
用C++编程,有必要像Java/C#那样把这些概念分开写接口吗?或者是否有可能(应该?)混合使用抽象类?
如您所知,在 C++ 中有用于声明接口的独立语言工具,它们的作用可以由抽象类来承担。但从意识形态的角度来看,接口和抽象类是截然不同的实体。接口描述了如何与类交互的契约。抽象类是类层次结构的根,用于本着多态性的精神
AbstractSuperClass* a = new SubClass;
并且可以简单地实现通用功能。
用C++编程,有必要像Java/C#那样把这些概念分开写接口吗?或者是否有可能(应该?)混合使用抽象类?
C#/Java没有类的多重继承,但是有接口的多重继承。因此,在这些语言中,接口和抽象类不得不分开。
在C++中,没有这样的限制,所以没有特别需要把“接口”的概念和抽象类分开。任何抽象类都可以作为接口,它甚至不必具有公共虚函数(好吧,如果需要多态删除,析构函数除外)。这种接口的一个例子是NVI模式。
如果你想更符合 C#/Java 语言的 OOP 范式,你可以给出以字母 开头的接口类名称
I,甚至添加在声明/定义时突出显示接口类。此类方法用于 MS COM。
但一般情况下,这不是必须的,菱形层次问题可以通过虚继承来解决。