Effective C++条款36: 区分接口继承和实现继承
注:下面所说虚函数指不是纯虚函数的普通虚函数。
这里所说的接口继承,指的是继承基类的纯虚函数;实现继承指的是继承基类的虚函数或者普通函数。
本条款实际上讲的是使用纯虚函数还是虚函数的问题。
这个条款概括起来就是:
如果基类不需要实现,实现在派生类中,那么基类中定义纯虚函数;
如果基类有默认实现,某些派生类可能会重新定义实现,那么基类中定义虚函数;
如果派生类完全继承基类的实现,不需任何改变,那么基类中定义普通函数。
纯虚函数只是一个接口,一般基类不需实现这个接口,但是不表示基类不能实现这个接口(和java不同),实际上,纯虚函数可以在基类内声明,在基类外实现(当然也可以在派生类实现)。
如下面是正确的,注意基类外实现不加virtual.
class A
{
public:
virtual void fun() = 0;
};
void A::fun()
{
}
我认为,如果纯虚函数在类外实现,那和普通虚函数的使用没有区别了。