C++中的虚函数实例之间有什么区别?

1 c++ virtual function abstract

以下两个声明之间的区别是什么?

virtual void calculateBase() = 0;  
virtual void calculateBase();
Run Code Online (Sandbox Code Playgroud)

我读过第一个(= 0)是一个"纯粹的抽象函数"但是第二个是什么呢?

Jor*_*ans 8

第一个是"纯虚拟" - 它会使类抽象,尝试实例化它将导致编译器错误.它旨在用作基类,其中派生类通过实现纯虚函数来实现必要的行为.尽管可以,但您不必在基类中实现该功能.
这是一种常用于两种设计模式的模式:

  • "模板方法"设计模式,其中,所述基类实现围绕一个函数调用的结构,但该函数调用的细节必须由派生类填充,和
  • "接口"设计模式,因为C++没有interface关键字.抽象基类,理想情况下只有纯虚函数和没有成员数据,是C++定义接口的方法.

第二个声明只是一个普通的虚拟成员函数声明.如果未能在基类中实现成员函数,则会出现编译器错误.它仍然是虚拟的,这意味着覆盖派生类中的行为可能很有用.

  • +1是一个非常好的和完整的答案,也直接设置术语. (2认同)

Nav*_*een 7

第一个被称为纯虚函数.通常,纯虚函数不具有任何实现,并且您无法创建包含纯虚函数的类的实例.

第二个是虚函数(即'正常'虚函数).类提供此函数的实现,但其派生类可以通过为此方法提供自己的实现来覆盖此实现.