创建C ++继承结构时,必须在多个位置定义完全相同的成员函数:
如果B是抽象基类,并且D,E和F都从B继承,那么你可能会这样:
class B
{
virtual func A( ... params ) = 0;
};
class D : public B
{
func A( ... params );
};
/* ... etc... similar implementations for E and F */
所以,这里显然有一些重复。如果B的接口很大,如果接口需要更改,则可能有很多地方需要更改。
一位同事建议使用嵌入式巧妙创建的#includes,ala:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
这看起来有点笨拙?是吗?有没有更好的解决方案来避免双重维护?
此外,这里的解决方案可能是支持语言的更好工具,例如Visual Assist X?
编辑:假设派生类必须具有唯一的实现。
答案 0 :(得分:12)
实际上,更改界面的最大问题通常是使用它的所有代码,而不是实现它的代码。如果为实施者更改它很容易,那么可能会让用户的生活更加艰难。
答案 1 :(得分:4)
改变广泛使用的界面是痛苦的不是一个错误;这是一个特色。
答案 2 :(得分:4)
此外,这里的解决方案可能是支持语言的更好工具,例如Visual Assist X?
完全。更改方法签名是key feature重构工具。
答案 3 :(得分:1)
如果必须使用某些默认行为反复实现它们,那么它们可能只是虚拟的,而不是纯虚拟的。
答案 4 :(得分:1)
不是以另一种方式使用预处理器,而是不应该使用它,我会尝试使用我的编辑器(或者IDE,如果这是你想要的那样。)