做网站的需求,拓者8室内设计网,那些网站是asp做的,如何在服务器上放网站文章目录1、虚函数表指针2、多态构成的条件3、重载、重写、重定义 三者区别4、继承与虚函数5、单继承中的虚函数表无虚函数覆盖有虚函数覆盖6、单继承中的虚函数表无虚函数覆盖有虚函数覆盖参考看《深度探索c对象模型》的时候对虚表有了点疑惑#xff0c;正好网上有些文章解除…
文章目录1、虚函数表指针2、多态构成的条件3、重载、重写、重定义 三者区别4、继承与虚函数5、单继承中的虚函数表无虚函数覆盖有虚函数覆盖6、单继承中的虚函数表无虚函数覆盖有虚函数覆盖参考看《深度探索c对象模型》的时候对虚表有了点疑惑正好网上有些文章解除了这个疑惑记录一下1、虚函数表指针
在64位操作系统下当我们计算包含虚函数的类大小时我们会发现不管类中有几个虚函数类的大小都会比没有虚函数时类的大小大8这是因为存了一个指向虚表的指针大小为8字节。 对象中的这个指针我们叫做虚函数表指针虚函数指针指向的这个表叫虚函数表简称虚表虚表中存的是虚函数的地址
图1 类代码 图2 对象模型
2、多态构成的条件
必须通过父类的指针或者引用调用虚函数父类的函数必须是虚函数且子类必须对父类的虚函数进行重写
3、重载、重写、重定义 三者区别 4、继承与虚函数
在构造子类前会先构造父类而在构造父类的时候通过this指针看到如下图左所示虚函数表中存的父类中的三个虚函数的地址而在构造子类的时候可以看到如下图右所示父类中的虚函数在子类中被重写的两个虚函数将父类的虚函数覆盖了这就是多态父类指针保存子类地址却可以通过父类指针访问子类成员的原因 当我们在子类中对父类的虚函数重写后当父类去调用该虚函数的时候就会访问虚表然而虚表中存放的是已经被子类覆盖的子类的函数所以就会转去调用子类中的重写的虚函数。 其实子类的虚函数是在虚表中的只不过从监视器的角度看不到因为从监视器的角度__vfptr的成员始终属于父类的成员。
5、单继承中的虚函数表
无虚函数覆盖
虚函数按照其声明顺序放于表中 父类的虚函数在子类的虚函数前面
有虚函数覆盖
覆盖的fun1()函数被放到了虚函数表中原来父类虚函数的位置 没被覆盖的函数依旧
6、单继承中的虚函数表
无虚函数覆盖
每个父类都有自己的虚表 子类的成员函数被放到第一个父类的表中(所谓第一个父类是按照声明顺序来判断的)------这样做是为了解决不同的父类类型的指针指向同一个子类实例而能够调用到实际的函数 子类实例中的虚函数表如下图所示
有虚函数覆盖
只要子类中重写的父类的虚函数都会覆盖 没被覆盖的函数依旧 子类虚函数表如下
参考
https://blog.csdn.net/weixin_50886514/article/details/117536971 https://bbs.csdn.net/topics/370154900?page3