什么是虚拟函数?(a virtual function?)

虚函数是在超类中定义的函数,它必须存在于子类中,子类才能有完整的类定义。虚拟函数依赖于一种面向对象的编程范例,称为虚拟继承,这是最常见的C++中使用“虚拟”关键字。要定义虚函数,需要两个类,一个超类和一个子类。超类是函数第一次声明的地方,也可能是定义的地方。子类是定义或重写函数的位置,具体取决于函数是否在超类中定义。...

虚函数是在超类中定义的函数,它必须存在于子类中,子类才能有完整的类定义。虚拟函数依赖于一种面向对象的编程范例,称为虚拟继承,这是最常见的C++中使用“虚拟”关键字。要定义虚函数,需要两个类,一个超类和一个子类。超类是函数第一次声明的地方,也可能是定义的地方。子类是定义或重写函数的位置,具体取决于函数是否在超类中定义。

To define a virtual function, two classes are necessary, a superclass and a subclass.

虚拟函数可以用两种方式之一定义。首先,它可以定义为一个存根,其中它有一个空的主体,不做任何事情。其次,可以将其定义为纯虚函数,在超类的头文件中将其定义为NULL。

这两种方法各有优缺点。将函数定义为存根可以确保所有子类都有它的一些实现,即使它什么也不做。但是,如果忘记重写函数并在子类中正确实现它,则不会出现任何错误或警告来指出这一点。另一方面,定义纯虚函数要求每个子类都有自己的函数定义,如果不是这样,就会出现错误。

但是,虚拟函数与非虚拟函数遵循相同的继承规则,因此具有两个以上级别的继承层次结构可能不需要显式定义虚拟函数。例如,可以考虑一类声明一个虚函数的类,它在子类B中实现。B类有自己的子类,C类。类C不需要类A函数的显式定义,因为它继承了类B的定义。如有必要,C类可以重写B类的函数,也可以在调用它的同时重写B类的函数。

在另一个极端,如果虚函数在子类中声明为虚函数,则不必在该子类中定义它们。例如,可以考虑声明一个虚函数并具有两个子类B和C的类A。此外,可以想象B类具有子类D和E,并且子类C具有子类F和G。

类B到类G都必须以某种方式定义类A的虚函数。如果类B有A函数的实现,那么类D和E不需要重做。也许C的子类需要实现A的函数,但它们都做了一些不同的事情,所以在类C中定义函数本身是没有用的。在这种情况下,该函数可以在类C中声明为虚拟函数,并且不需要实现。

虚拟函数可能让人望而生畏,但如果使用得当,它们可以减少代码重复,使代码更易于理解。然而,虚拟函数存在许多缺陷,特别是在多重继承方面。在多重继承中,定义模糊的虚拟函数可能会相互冲突,因此在这种情况下应谨慎使用。

  • 发表于 2021-12-12 16:54
  • 阅读 ( 169 )
  • 分类:互联网

你可能感兴趣的文章

如何求二次函数的对称轴(find the axis of symmetry of a quadratic function)

什么是二次函数(a quadratic function)? 二次多项式函数称为二次函数。形式上,f(x)=ax2+bx+c是一个二次函数,其中a、b和c是实常数,a≠x的所有值均为0。二次函数的图形是抛物线。 如何求二次函数的对称轴 任何二次函数...

  • 发布于 2021-06-27 00:49
  • 阅读 ( 811 )

关系(a relation)和函数(a function)的区别

...同样,关系数据库中的表也是一个关系。 什么是函数(a function)? 函数是执行某项任务的一组语句。它也称为过程或方法。程序员可以将主程序分成多个函数,并根据需要调用它们。而且,这使得程序更易于管理。 此外,它还提...

  • 发布于 2021-07-01 05:56
  • 阅读 ( 292 )

函数重载(function overloading)和C++中的重写(overriding in c++)的区别

...的重写决定了调用函数的哪个版本。 函数间重载(between function overloading)和C++中的重写(overriding in c++)的区别 C++中函数重载是编译时多态性,而C++中的函数重写是运行时 重载中有一个特定的关键字,而“Virtual”是函数重写中的一...

  • 发布于 2021-07-08 11:14
  • 阅读 ( 342 )

什么是波函数?(a wave function?)

波函数被定义为描述粒子量子态概率的函数,它是位置、动量、时间和/或自旋的函数。波函数通常用变量ψ表示。 波函数可以用来描述在物质波中发现电子的概率。为此,波函数(可能包括一个虚数)被平方以得到实数解。...

  • 发布于 2021-09-25 06:32
  • 阅读 ( 269 )

什么是二次函数的零点?(the zeros of a quadratic function?)

两个零 从薪水到薪水的生活很艰难。当然,你不能带着它,但是用阿尔波和萨尔廷的一餐来纪念每个月的第一个月和最后一个月是没有乐趣的。 厌倦了这种从繁荣到萧条的循环(吃狗粮),特蕾莎决定在一个月内研究她...

  • 发布于 2021-10-05 07:51
  • 阅读 ( 263 )

什么是成本函数?(a cost function?)

成本函数是投入价格和产出数量的函数,其价值是给定投入价格的产出成本,公司通常通过使用成本曲线来实现成本最小化和生产效率最大化。该成本曲线有多种不同的应用,包括边际成本和沉没成本的评估。 在经济学中,...

  • 发布于 2021-10-12 18:24
  • 阅读 ( 192 )

什么是散列函数?(a hash function?)

哈希函数是计算机错误检查和数据组织的一种方法。大量数据通过数学算法进行处理,直到只剩下少量数据。此编号用作目录的一部分,允许计算机以后查找特定信息。一...

  • 发布于 2021-12-10 15:04
  • 阅读 ( 236 )

什么是并行虚拟机?(a parallel virtual machine?)

并行虚拟机是一种软件应用程序,它允许分布在不同地理位置的多台独立计算机作为网络相互连接,并将其系统处理能力和内存借给一个应用程序。 ...

  • 发布于 2021-12-11 22:26
  • 阅读 ( 197 )

什么是虚拟课堂?(a virtual class?)

...言能够使用多重继承。根据所引用的计算机编程语言,“virtual”关键字、相似关键字或类的语法和语义用于暗示特定类将被视为虚拟类。 ...

  • 发布于 2021-12-12 16:48
  • 阅读 ( 86 )

什么是虚拟函数?(a virtual function?)

虚函数是在超类中定义的函数,它必须存在于子类中,子类才能有完整的类定义。虚拟函数依赖于一种面向对象的编程范例,称为虚拟继承,这是最常见的C++中使用“虚拟...

  • 发布于 2021-12-12 16:54
  • 阅读 ( 169 )