C++对象内存布局--①测试虚函数表属于类

测试1:同一个类的多个对象共享同一张虚函数表。

 

//虚函数表.cpp
//2010年8月18日
//测试虚函数表,说明虚函数表属于类所有。同一个类的多个对象共享同一张虚函数表
//VS编译器
#include <iostream>
using   namespace   std;class Base
{public :Base(int a = 0):a(a){cout << "Base::base()" << endl;}virtual ~Base(){cout << "Base::~Base" << endl;}virtual void show(){cout << "Base::show()" << endl;}private:int a;
};int main()
{Base aobj(10);typedef void (__thiscall *fun)(void*pThis);//非常重要int** p = (int**)&aobj;cout << "对象大小     = " << sizeof(aobj) << endl;cout << "虚函数表指针 = " << p[0] << endl;cout << "成员变量   a = " << p[1] << endl;cout << "通过指针调用虚函数表中的函数" << endl;((fun)(p[0][1]))(p);//调用show函数cout << endl << "测试同一个类的另一个对象" << endl;Base bobj(20);int** pp = (int**)&bobj;cout << "对象大小     = " << sizeof(bobj) << endl;cout << "虚函数表指针 = " << pp[0] << endl;cout << "成员变量   a = " << pp[1] << endl;cout << "通过指针调用虚函数表中的函数" << endl;((fun)(pp[0][1]))(pp);system("pause");return 0;
}
/*
Base::base()
对象大小     = 8
虚函数表指针 = 0041C2B0
成员变量   a = 0000000A
通过指针调用虚函数表中的函数
Base::show()测试同一个类的另一个对象
Base::base()
对象大小     = 8
虚函数表指针 = 0041C2B0
成员变量   a = 00000014
通过指针调用虚函数表中的函数
Base::show()
请按任意键继续. . .
Base::~Base
Base::~Base
*/

C++对象内存布局--①测试虚函数表属于类相关推荐

  1. C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中

    C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中 测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中. 派生类有多少个拥有虚函数的基类,派生类对象就有多少 ...

  2. 807-C++多继承下,派生类对象有几张虚函数表?

    C++多继承下,派生类对象有几张虚函数表? 我们看下面这个示例: #include <iostream> #include <string> #include <type ...

  3. C++中的类对象的内存分布以及虚函数表内存分布

    ​ 目录 目录 一.前言 二.C++ 类对象的内存布局 三.函数调用 一.前言 C++的精髓是虚函数.虚函数带来的好处就是:可以定义一个基类的指针,其指向一个继承类,当通过基类的指针去调用函数时,可以 ...

  4. 【C++】 类的内存对齐、虚函数表

      本文分为以下几个部分内容: 什么是内存对齐,为什么要内存对齐 C++的空类,以及没有虚函数和非静态变量的类 C++类的内存分布(成员变量) C++类的内存分布(虚函数) 一个类的情况 继承关系中的 ...

  5. 深入理解C++ 虚函数表

    目录 深入理解C++ 虚函数表 虚函数表概述 单继承下的虚函数表 派生类未覆盖基类虚函数 派生类覆盖基类虚函数 多继承下的虚函数表 无虚函数覆盖 派生类覆盖基类虚函数 钻石型虚继承 总结 几个原则 安 ...

  6. c++虚函数和虚函数表

    前言 (1)虚基表与虚函数表是两个完全不同的概念 虚基表用来解决继承的二义性(虚基类可以解决). 虚函数用来实现泛型编程,运行时多态. (2)虚函数是在基类普通函数前加virtual关键字,是实现多态 ...

  7. C++对象的内存布局1---基础篇----C++ 虚函数表解析

    [-] 前言 虚函数表 一般继承(无虚函数覆盖) 一般继承(有虚函数覆盖) 多重继承(无虚函数覆盖) 多重继承(有虚函数覆盖) 安全性 结束语 附录一:VC中查看虚函数表 附录 二:例程 前言 C++ ...

  8. C++中的虚函数表介绍

            在C++语言中,当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定.因为我们直到运行时才能知道到底调用了哪个版本的虚函数,所以所有虚函数都必须有定义.通常情况下,如果我们不使 ...

  9. 【C++ Primer | 15】虚函数表剖析(一)

    一.虚函数 1. 概念 多态指当不同的对象收到相同的消息时,产生不同的动作 编译时多态(静态绑定),函数重载,运算符重载,模板. 运行时多态(动态绑定),虚函数机制. 为了实现C++的多态,C++使用 ...

最新文章

  1. 使用openpyxl处理表格数据
  2. numpy 修改数组维度
  3. 织梦dedecms如何对列表添加判断语句
  4. 为什么是hbase而不是mongodb
  5. Wireshark和 TcpDump抓包分析心得
  6. 邮局-[IOI2000](四边形不等式)
  7. 详解SMS下OSD2008
  8. 在cordova中使用HTML5的多文件上传
  9. AOP (面向切面编程)
  10. 项目管理九大知识领域
  11. [xsy2282]cake
  12. 4.网络层(2)---子网划分
  13. android 投屏技术原理,什么是无线投屏技术,无线投屏技术原理解析
  14. Python写的一个文件生成器脚本
  15. 联想叶明:“双态IT”不能一刀切理解
  16. Echars 如何描绘世界地图
  17. XMPP通信语义学 message, presence IQ
  18. docker容器的时间问题
  19. vue项目报错in ./src/app.vue?vuetype=styleindex=0lang=less
  20. 浅谈sketch插件二

热门文章

  1. No entry found for dependency in Cartfile.
  2. Nmap 7.70新增功能——扫描主机所有IP
  3. Xamarin.Android提示aapt退出,代码为255
  4. 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
  5. 广义hough变换matlab,matlab – 广义Hough R表
  6. html轮廓位置,html – 具有边框/轮廓的六边形
  7. 脑机接口主流算法解析课程视频汇总
  8. Vuforia 6.1提供4个版本下载
  9. id 怎么获取jira 评论_一篇文章教会你使用Python定时抓取微博评论
  10. 苹果史上最强芯片竟然是个“组装货”!iPhone SE涨价,13系列是真绿了