【C/C++】【对象模型】虚函数
2020-12-19 20:41
标签:链接 创建 ++ 超出 入口 存在 lse 时机 不同 类:有虚函数,会产生一个虚函数表; 类对象:有一个指针,指针vptr会指向虚函数表的开始地址; 虚函数表位于整个对象模型的顶端; 一个类只有包含虚函数才存在虚函数表,同属于一个类的对象共享虚函数表,但是有各自的vptr(虚函数指针),所指向的虚函数的入口地址都是相同的; 父类中有虚函数,子类中有虚函数;即父类中有虚函数表,子类中肯定也有虚函数表; 无论是父类还是子类都会只有一个虚函数表,不能认为子类中有一个虚函数表 + 父类中一个虚函数表,得到子类中有两个虚函数表; 子类中是否可能有多个虚函数表? 如果子类中完全没有新的虚函数,则我们可以认为子类的虚函数表和父类的虚函数表内容相同;但仅仅是内容相同,这两个表在内存中处于不同位置; 虚函数表中每一项,保存一个虚函数的入口地址,如果子类的虚函数表某项和父类虚函数表某项相同(这表示子类没有覆盖父类的虚函数); 超出虚函数表部分内容不可知;无实际意义; 一个对象,如果它的类有多个基类则有多个虚函数表指针(注意是两个虚函数表指针,而不是两个虚函数表); 在多继承中,对应各个基类的vptr按照继承顺序依次放置在类的内存空间中,且子类与第一个基类公用一个vptr(第二个基类有自己的vptr); 子类对象有两个虚函数表指针,vptr1和vptr2; 类Derived有两个虚函数表,因为它继承自两个基类; 子类和第一个基类公用一个vptr(应为vptr指向一个虚函数表,所以也可以说子类和第一个基类公用一个虚函数表vtb1) 因为我们注意到类Dreived的虚函数表1里面的5个函数u,g正好是基类1里面的函数; 子类中的虚函数覆盖了父类中的同名虚函数; 辅助工具: **cl.exe ** 编译链接工具 【C/C++】【对象模型】虚函数 标签:链接 创建 ++ 超出 入口 存在 lse 时机 不同 原文地址:https://www.cnblogs.com/Trevo/p/13367558.html虚函数表指针位置分析
虚函数指针的位置
// objModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include
继承关系作用下虚函数的手工调用
// objModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include
虚函数表分析
// objModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include
// objModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//基类不同对象虚函数指针
//基类和父类对象 虚函数指针
#include
多重继承虚函数表分析
#include
vptr/vtbl创建时机
虚函数调用问题
下一篇:LOF异常检测算法实现