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

 

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

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

 

这个条款概括起来就是:

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

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

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

 

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

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

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

}

 

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

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2021-11-25
  • 2021-12-26
  • 2022-02-08
  • 2021-11-24
猜你喜欢
  • 2022-01-24
  • 2021-11-07
  • 2021-10-15
  • 2021-10-27
  • 2022-01-12
  • 2021-12-04
  • 2022-01-06
相关资源
相似解决方案