我在设计方面有点弱,我想知道在接口(interface)中使用简单的虚拟方法(不仅仅是纯虚拟)是否是一个好的设计?我有一个类是某种接口(interface):
class IModel {
void initialize(...);
void render(...);
int getVertexCount() const;
int getAnotherField() const;
};
initialize 和 render 方法肯定需要重新实现,因此它们是纯虚方法的良好候选者。然而,最后两个方法非常简单并且实际上总是具有相同的实现(只是返回一些字段)。我可以将它们保留为具有默认实现的虚拟方法,还是让它成为需要重新实现的纯虚拟更好,因为它是一个接口(interface)?
最佳答案
我们必须指出一些区别:
没有“某种接口(interface)”这样的东西,这个类应该是接口(interface)还是抽象类?
如果它应该是一个接口(interface),那么答案是:它的所有方法都必须是纯虚拟(无实现)并且它必须不包含字段,甚至一个都不能.正如 jaunchopanza 所说,您最多(实际上必须)做的就是为虚拟析构函数提供一个空主体,从而允许相应地析构派生类。
相反,如果它应该是一个抽象类,那么您可以自由添加字段 m_vertexCount
和 m_anotherField
(我想)并实现 getVertexCount ()
和 getAnotherField() 随心所欲。但是,您应该不将其命名为IModel
,因为I
前缀应该只用于接口(interface)。
编辑:我认为我是 Bo Persson 所说的那些“信徒”之一 :)
关于c++ - 接口(interface)/抽象类应该只包含纯虚方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786682/