小编典典

虚函数和纯虚函数之间的区别

all

纯虚函数和虚函数有什么区别?

我知道“纯虚函数是一个没有实体的虚函数”,但这意味着什么,以及下面这行实际上做了什么:

virtual void virtualfunctioname() = 0

阅读 93

收藏
2022-06-02

共1个答案

小编典典

虚函数使其类成为 多态基类 。派生类可以覆盖虚函数。通过基类指针/引用调用的虚函数将在运行时解析。也就是说,使用对象的 动态类型 而不是其
静态类型

 Derived d;
 Base& rb = d;
 // if Base::f() is virtual and Derived overrides it, Derived::f() will be called
 rb.f();

纯虚函数是声明以 结尾的虚函数=0

class Base {
  // ...
  virtual void f() = 0;
  // ...

纯虚函数隐式地使它为 抽象 类定义(不像在 Java
中你有一个关键字来显式声明类抽象)。抽象类不能被实例化。派生类需要覆盖/实现所有继承的纯虚函数。如果不这样做,它们也会变得抽象。

C++
的一个有趣的“特性”是一个类可以定义一个具有实现的纯虚函数。(这有什么好处是值得商榷的。)


请注意,C++11 为deleteanddefault关键字带来了新用法,看起来类似于纯虚函数的语法:

my_class(my_class const &) = delete;
my_class& operator=(const my_class&) = default;
2022-06-02