Effective C++条款36: 区分接口继承和实现继承

注:下面所说虚函数指不是纯虚函数的普通虚函数。

这里所说的接口继承,指的是继承基类的纯虚函数;实现继承指的是继承基类的虚函数或者普通函数。

本条款实际上讲的是使用纯虚函数还是虚函数的问题。

这个条款概括起来就是:

如果基类不需要实现,实现在派生类中,那么基类中定义纯虚函数;

如果基类有默认实现,某些派生类可能会重新定义实现,那么基类中定义虚函数;

如果派生类完全继承基类的实现,不需任何改变,那么基类中定义普通函数。

纯虚函数只是一个接口,一般基类不需实现这个接口,但是不表示基类不能实现这个接口(和java不同),实际上,纯虚函数可以在基类内声明,在基类外实现(当然也可以在派生类实现)。

如下面是正确的,注意基类外实现不加virtual.

class A
{
public:
    virtual void fun() = 0;
};
void A::fun()
{

}

 

我认为,如果纯虚函数在类外实现,那和普通虚函数的使用没有区别了。

原文地址:https://www.cnblogs.com/helloweworld/p/3103256.html