下面两个声明有什么区别?
virtual void calculateBase() = 0;
virtual void calculateBase();
我读到第一个 (=0) 是一个“纯抽象函数”,但第二个是什么?
最佳答案
第一个是“纯虚拟”——它会使类抽象,尝试实例化它会导致编译器错误。它旨在用作基类,其中派生类通过实现纯虚函数来实现必要的行为。尽管可以,但您不必在基类中实现该函数。
这是一种经常用于两种设计模式的模式:
- "template method"设计模式,其中基类围绕函数调用实现一个结构,但是函数调用的细节必须由派生类填写,并且
- “接口(interface)”设计模式,因为 C++ 没有接口(interface)关键字。抽象基类,理想情况下只有纯虚函数,没有成员数据,是定义接口(interface)的 C++ 方式。
第二个声明只是一个普通的虚成员函数声明。如果您未能在基类中实现成员函数,您将得到编译器错误。它仍然是虚拟的,这意味着覆盖派生类中的行为可能很有用。
关于c++ - C++中的虚函数实例化有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420552/