当前位置: 首页 > wzjs >正文

wordpress观点全面的seo网站优化排名

wordpress观点,全面的seo网站优化排名,建设局局长有实权吗,做网站的费用记什么会计科目目录 1. 引言 2. 单继承下的虚函数表 2.1 基本概念 2.2 示例分析 3. 多重继承下的虚函数表 3.1 基本概念 3.2 示例分析 4. 虚函数表指针(vptr)的存储 4.1 单继承 4.2 多重继承 5. 常见面试题解析 问题1:D 继承 B1 和 B2&#xff0…

目录

1. 引言

2. 单继承下的虚函数表

2.1 基本概念

2.2 示例分析

3. 多重继承下的虚函数表

3.1 基本概念

3.2 示例分析

4. 虚函数表指针(vptr)的存储

4.1 单继承

4.2 多重继承

5. 常见面试题解析

问题1:D 继承 B1 和 B2,D 新增虚函数放在哪里?

问题2:D 有几个虚表指针?

问题3:如果 B1 没有虚函数,B2 有虚函数

6. 总结


1. 引言

在C++中,虚函数是实现运行时多态(动态绑定)的核心机制,而虚函数表(vtable)和虚表指针(vptr)是实现这一机制的关键。理解虚函数在类对象模型中的存储方式,对于深入掌握C++面向对象编程至关重要。本文将详细分析:

  • 单继承下的虚函数表布局
  • 多重继承下的虚函数表布局
  • 虚函数表指针(vptr)的存储方式
  • 新增虚函数对虚表的影响

2. 单继承下的虚函数表

2.1 基本概念

当一个类包含虚函数时,编译器会为该类生成一个虚函数表(vtable),存储所有虚函数的地址。每个对象的内存布局中,前4字节(32位系统)或前8字节(64位系统)存储指向虚函数表的指针(vptr)。

2.2 示例分析

class A {
public:virtual void func1() { cout << "A::func1" << endl; }virtual void func2() { cout << "A::func2" << endl; }
};class B : public A {
public:virtual void func1() override { cout << "B::func1" << endl; } // 重写virtual void func3() { cout << "B::func3" << endl; }          // 新增
};

内存布局:

对象虚表指针(vptr)虚表内容
Avptr_AA::func1A::func2
Bvptr_BB::func1(重写), A::func2B::func3(新增)

关键点:

  • B 继承 A,因此 B 的虚表包含 A 的所有虚函数(func1 被重写,func2 保留)。
  • B 新增的 func3 附加到虚表末尾。

3. 多重继承下的虚函数表

3.1 基本概念

在多重继承中,派生类会为每个包含虚函数的基类维护一个独立的虚函数表。如果派生类新增虚函数,它们会附加到第一个基类的虚表末尾

3.2 示例分析

class B1 {
public:virtual void f1() { cout << "B1::f1" << endl; }
};class B2 {
public:virtual void f2() { cout << "B2::f2" << endl; }
};class D : public B1, public B2 {
public:virtual void f1() override { cout << "D::f1" << endl; }  // 重写 B1::f1virtual void f2() override { cout << "D::f2" << endl; }  // 重写 B2::f2virtual void f3() { cout << "D::f3" << endl; }           // 新增虚函数
};

内存布局:

对象虚表指针(vptr)虚表内容
Dvptr_B1D::f1D::f3(新增)
vptr_B2D::f2

关键点:

  • D 继承 B1 和 B2,因此有 2 个虚表指针vptr_B1 和 vptr_B2)。
  • D 新增的 f3 附加到 B1 的虚表末尾(因为 B1 是第一个基类)。
  • B2 的虚表仅存储 D 重写的 f2

4. 虚函数表指针(vptr)的存储

4.1 单继承

  • 只有一个 vptr,位于对象起始地址。
  • 示例:
A a;
B b;
cout << *(void**)&a; // 输出 A 的虚表地址
cout << *(void**)&b; // 输出 B 的虚表地址

4.2 多重继承

  • 每个基类对应一个 vptr,按继承顺序排列。
  • 示例:
D d;
void** vptr1 = *(void***)&d;                     // B1 的 vptr
void** vptr2 = *(void***)((char*)&d + sizeof(B1)); // B2 的 vptr

5. 常见面试题解析

问题1:D 继承 B1 和 B2D 新增虚函数放在哪里?

答案:放在第一个基类 B1 的虚表末尾。

问题2:D 有几个虚表指针?

答案:2 个(对应 B1B2)。

问题3:如果 B1 没有虚函数,B2 有虚函数

6. 总结

继承方式虚表指针数量新增虚函数存储位置
单继承1附加到基类虚表末尾
多重继承等于基类数量附加到第一个基类虚表末尾

关键结论:

  1. 虚函数表(vtable)是实现动态绑定的核心。
  2. 单继承时,派生类虚表包含基类虚函数 + 新增虚函数。
  3. 多重继承时,派生类为每个基类维护独立虚表,新增虚函数放在第一个基类虚表末尾。
http://www.dtcms.com/wzjs/9166.html

相关文章:

  • 教学网站线上销售平台如何推广
  • 男女做差差事的视频网站高端网站定制设计
  • 电子商务网站建设大二实训厦门百度代理
  • 开家给别人做网站公司我想接app注册推广单
  • 微信公众号的网站开发百度客服中心
  • 怎么做网站web疫情最新情况 最新消息 全国
  • 企业网站建设的核心是超级外链
  • 网站式的公司记录怎么做反向链接查询
  • 百度seo专业网站平台软件定制开发
  • 做网站单页视频湘潭关键词优化公司
  • 怎样提高网站的打开速度广州百度竞价开户
  • 服装展示网站源码seo管理平台
  • 北京中国建设部网站首页常州网络推广seo
  • 做网批有专门的网站吗兰州seo实战优化
  • wordpress 小兽搜索引擎优化的缺点包括
  • 小精灵网站在线做语文百度贴吧广告投放价格
  • 小语种网站如何联系百度推广
  • 石家庄工信部网站备案优化方案怎么写
  • 学完网站建设再可以学什么医院网络销售要做什么
  • 几分钟做网站java成品网站
  • 内容网站 如何做采集渠道推广
  • wordpress 新闻网站万网注册域名查询官方网站
  • 在百度上做网站找谁优化什么
  • 电子商务网站建设基本组成seo的培训网站哪里好
  • 网站 做百度推广有没有效果怎么样青岛seo服务哪家好
  • 烟台市福山区住房和建设局网站软文代写兼职
  • 长沙网站建设商城公司地址怎么弄在百度上显示
  • 做网站frontpage 2003重庆网络营销
  • 如何建立微信小程序卖自己的产品宁波网站推广优化外包
  • 自己做本地网站中国新闻网最新消息