虚函数

1. 虚函数的声明

定义:每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。
在类中,用virtual声明的成员函数。

// 案例:
class B
{
private: 
  int a;
public:
  vortual void max();  //虚函数的声明
}

2. 虚函数的功能

虚函数主要实现C++的多态和成员函数的重写。

3. 虚函数的实现机制

说到虚函数是怎么实现的,我们首先会想到虚函数表(vtable)和虚函数指针。
虚函数的处理:编译器在编译,发现类中有成员函数为虚函数,则会建立一个虚函数表;且该虚函数表为同一个类的共享内存。
虚函数表的结构:它是一个函数指针表,每一个表项都指向一个函数。任何一个包含至少一个虚函数的类都会有这样一张表。vtable只包含虚函数的指针,没有函数体。实现上是一个函数指针的数组。虚函数表既有继承性又有多态性。每个派生类的vtable继承了它各个基类的vtable,如果基类vtable中包含某一项,则其派生类的vtable中也将包含同样的一项,但是两项的值可能不同(即指向不同的函数)。如果派生类覆盖(override)了该项对应的虚函数,则派生类vtable的该项指向覆盖后的虚函数,没有覆盖的话,则沿用基类的值。

注意:虚函数表是在编译器编译的时候创建的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 5,677评论 4 19
  • 什么是虚函数? 使用 virtual 关键字修饰的函数即为虚函数,virtual 关键字只能对类中的非静态函数使用...
    Baqun阅读 6,575评论 0 3
  • 我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次...
    踩在浪花上00阅读 3,321评论 0 1
  • 原文地址:新浪博客 | zjdtc | 虚函数与构造函数、析构函数 | 2011-06-22本文在原文之上,增加了...
    蓝雪冬荷阅读 4,596评论 0 0
  • 没有过不去的坎。再睡了一个觉后,今天早上九点左右起来了。并没有感觉睡不够,还挺清醒。虽然对原来的公司有些想法或者眷...
    小王加油啊阅读 1,072评论 0 0

友情链接更多精彩内容