c++ - 接口(interface)/抽象类应该只包含纯虚方法吗?

标签 c++

我在设计方面有点弱,我想知道在接口(interface)中使用简单的虚拟方法(不仅仅是纯虚拟)是否是一个好的设计?我有一个类是某种接口(interface):

class IModel {
    void initialize(...);
    void render(...);

    int getVertexCount() const;
    int getAnotherField() const;
};

initialize 和 render 方法肯定需要重新实现,因此它们是纯虚方法的良好候选者。然而,最后两个方法非常简单并且实际上总是具有相同的实现(只是返回一些字段)。我可以将它们保留为具有默认实现的虚拟方法,还是让它成为需要重新实现的纯虚拟更好,因为它是一个接口(interface)?

最佳答案

我们必须指出一些区别:

没有“某种接口(interface)”这样的东西,这个类应该是接口(interface)还是抽象类?

如果它应该是一个接口(interface),那么答案是:它的所有方法都必须是纯虚拟(无实现)并且它必须包含字段,甚至一个都不能.正如 jaunchopanza 所说,您最多(实际上必须)做的就是为虚拟析构函数提供一个空主体,从而允许相应地析构派生类。

相反,如果它应该是一个抽象类,那么您可以自由添加字段 m_vertexCountm_anotherField(我想)并实现 getVertexCount () 和 getAnotherField() 随心所欲。但是,您应该将其命名为IModel,因为I 前缀应该只用于接口(interface)。

编辑:我认为我是 Bo Persson 所说的那些“信徒”之一 :)

关于c++ - 接口(interface)/抽象类应该只包含纯虚方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786682/

相关文章:

c++ - Linux 中的静态链接可移植吗?

c++ - 使用列表列出不可迭代的插入迭代

c++ - CLI/C# 类中属性的特殊访问控制

c++ - 如何从文件中读取整数到动态数组

c++ - 获取包含头文件中声明的实体定义的源文件名?

C++ 为多线程适配一个库

c++ - 将 C++/C 中的二维数组拆分为子数组

类成员函数的 C++ Functor 模板

c++ - 如何与 Eigen 进行逐元素比较?

c++ - 如何检查对象数组是否具有引用的对象