c++ - C++中的虚函数实例化有什么区别?

标签 c++ function virtual abstract

下面两个声明有什么区别?

virtual void calculateBase() = 0;  
virtual void calculateBase();

我读到第一个 (=0) 是一个“纯抽象函数”,但第二个是什么?

最佳答案

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

  • "template method"设计模式,其中基类围绕函数调用实现一个结构,但是函数调用的细节必须由派生类填写,并且
  • “接口(interface)”设计模式,因为 C++ 没有接口(interface)关键字。抽象基类,理想情况下只有纯虚函数,没有成员数据,是定义接口(interface)的 C++ 方式。

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

关于c++ - C++中的虚函数实例化有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420552/

相关文章:

c++ - 是否有任何 API 或方法可以防止对动态分配的内存进行读访问(和写)?

c++ - 从友元函数访问静态变量

c++ - 来自普通函数的虚函数调用

c++ - 虚函数、函数重载、继承

c++ - 无法从 Objective C 调用 Objective-C++ 中定义的函数

c++ - 异常抛出异常

c++ - 类所需的模板参数

c - 将参数结构传递给 C 中的函数

javascript - 确定 ajax 调用已完成以运行另一个 ajax 调用

C++:使用指向派生类的指针进行虚函数调用仍然有一个vlookup