什么是虚拟函数(Virtual Function)?

虚函数是在超类中定义的函数,它必须存在于子类中才能有完整的类定义。虚函数依赖于称为虚继承的面向对象编程范式,这在C中最常见的是使用“virtual”关键字。要定义虚函数,有两个类是必需的,一个超类和一个子类。超类是首...
虚函数是在超类中定义的函数,它必须存在于子类中才能有完整的类定义。虚函数依赖于称为虚继承的面向对象编程范式,这在C中最常见的是使用“virtual”关键字。要定义虚函数,有两个类是必需的,一个超类和一个子类。超类是首先声明函数的地方,也可能是定义函数的地方。子类是定义函数或重写函数的地方,这取决于函数是否在超类中定义。要定义虚函数,需要两个类,一个超类和一个子类。虚函数可以用两种方法之一来定义:第一,它可以定义为存根,在存根中它有一个空的主体,什么也不做;第二个,它可以定义为一个纯虚函数,在超类的头文件中,它被定义为NULL。这两种方法各有优缺点。将函数定义为存根可以确保所有子类都能实现它,即使它什么都不做。但是,如果忘记重写函数并在子类中正确实现它,不会出现任何错误或警告来指出这一点。另一方面,定义纯虚函数要求每个子类都有自己的函数定义,如果不是这样,就会出现错误。但是,虚拟函数与非虚函数遵循相同的继承规则,因此,两级以上的继承层次结构可能不需要显式定义虚函数,例如可以考虑一个声明虚函数的类a,它是在子类B中实现的,B类有自己的子类,C类不需要显式定义类a~s函数,因为它继承了B类的定义如有必要,C类可以重写类B~s函数,也可以在调用类B~s函数的同时重写它。另一个极端是,如果虚函数在子类中声明为虚函数,则不必在该子类中定义。例如,可以考虑声明虚函数并有两个子类B的类a另外,我们可以想象B类有D和E的子类,C类有F和G的子类。B类到G类都必须定义A~s类的虚函数。如果B类有A~s函数的实现,D类和E类不需要重做。也许C~s子类需要实现A~s函数,但是它们都做了一些不同的事情,所以在C类中定义函数本身就没什么用了。在这种情况下,函数在C类中可能被声明为虚函数,并且不需要实现。虚拟函数学习起来可能会令人望而生畏,但如果使用得当,它们可以减少代码重复并使代码更易于理解一般来说,虚函数有很多缺陷,尤其是在多重继承方面。在多重继承中,模糊定义的虚函数可能会相互冲突,因此在这种情况下应谨慎使用
  • 发表于 2020-08-06 19:59
  • 阅读 ( 810 )
  • 分类:电脑网络

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

推荐文章

联系我们:uytrv@hotmail.com 问答工具