大型抽象基类

bob*_*obo 5 c++ class base abstract visual-c++

我正在编写一个大型抽象基类,其中包含30个纯虚拟方法*.

查找在实现类中的基类中实现的所有函数有点单调乏味,主要是因为MSVC++没有告诉您哪个函数无法实现编译器错误"无法构造抽象类"

所以,我想知道我的大型抽象基类是一个坏主意,还是我应该把它拆分成几个接口,或者是否有编译器警告我可以激活它会告诉我哪种方法我没有提供实现.或者这只是抽象类编码的一部分,我应该习惯它.

*它的作用是在几个不同的渲染子系统之间提供一层通用功能.

tem*_*def 4

这个问题没有明显的正确答案。决定是否将基类分解为多个抽象基类可能应该根据基类是否在逻辑上代表多个不同的概念来做出决定,而不是根据糟糕的编译器错误消息来做出决定。如果您这样做的唯一原因是编译器错误消息,您可能需要检查并查看是否可以升级编译器,或者是否有其他原因需要这样做。大多数现代编译器应该提供关于此的非常好的、详细的错误。

如果您的设计表明您可能实际上希望拥有多个仅实现基类的一小部分的不同类,则将接口分成几部分可能是一个好主意。如果您希望这样做,那么将接口分开可能会更有利。然而,您会发现这增加了一些复杂性。例如,如果您有一个接口类型的指针,指向实现多个接口的对象,您可能必须进行某种交叉转换才能获得正确的类型,或者您可能必须引入一个新的抽象类来表示继承的东西来自所有不同的接口类型。接口类的多重继承也可能会导致一些名称冲突,尽管如果接口设计正确,这通常不是问题。

简而言之,我强烈建议不要因为编译器错误的原因而这样做,但如果您认为这是一个很好的设计决策,那么无论如何都要这样做。如今,编译器已经足够好了,您很少(但并非永远)需要围绕它们构建您的设计。