我发现了这个问题:When to use abstract class or interface?。但有人要求Java
和C++
不同。有多重遗产,所以答案也许不同。
何时使用接口类?
如果我使用PIMPL
成语,那么将只有一个我只需要转发声明的成员。如果我将私有函数移到PIMPL
类中,则public
类中只有protected
和abstract
函数。因此,像这样的abstract
类和˙interface
类之间的区别在于interface
类中只有纯虚函数。它比前面提到的那个有什么优势吗?
答案 0 :(得分:1)
当类层次结构可以被视为通用时,使用接口类;可以交换子类而不影响调用类。
例如,有一个std::istream
类。如果需要std::istream
,任何函数或方法都可以将输入视为通用。因此,可以将cin
或ifstream
传递给该函数。 界面是一致的。
如果要从界面隐藏实现,请使用PIMPL惯用法。用于库类。