我正在编写一个大型的抽象基类,其中包含30多个纯虚方法*。
在实现类中找到所有需要实现的函数有点繁琐,主要是因为MSVC++不会告诉你哪个函数没有实现,只会显示编译器错误“无法构造抽象类”。
所以,我想知道我的大型抽象基类是否是一个不好的想法,或者应该将其拆分成几个接口,或者是否可以激活编译器警告,告诉我未提供实现的方法是哪个...或者这只是使用抽象类的一部分,我应该习惯它。
*它提供了几个不同渲染子系统之间的共同功能层。
我正在编写一个大型的抽象基类,其中包含30多个纯虚方法*。
在实现类中找到所有需要实现的函数有点繁琐,主要是因为MSVC++不会告诉你哪个函数没有实现,只会显示编译器错误“无法构造抽象类”。
所以,我想知道我的大型抽象基类是否是一个不好的想法,或者应该将其拆分成几个接口,或者是否可以激活编译器警告,告诉我未提供实现的方法是哪个...或者这只是使用抽象类的一部分,我应该习惯它。
*它提供了几个不同渲染子系统之间的共同功能层。
我认为接口类本质上是不好的,但是提出的问题使得这个特定应用程序听起来可疑。
如果有从该接口派生的类,并且不清楚需要覆盖哪些函数,则似乎表明所有这些函数可能都不是必需的。
当您创建抽象基类时,纯虚方法的数量并不重要(对我来说),但应清楚地说明每个从此接口派生的类必须实现每个纯虚函数的原因。如果您发现自己在想“为什么我必须实现此函数?”,则可能适合将抽象类分成几个不同的接口。
总之,这样一个庞大的类是一团糟,是God类反模式。使用聚合/组合来拆分类,并查看SOLID开发原则,看起来单个类有30个方法不符合单一责任原则,至少...所以我建议重新考虑类的设计。祝好运!