千家信息网

C++中虚函数内存结构是怎么样的

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下C++中虚函数内存结构是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!虚函数的内存结构虚函数的内
千家信息网最后更新 2025年01月18日C++中虚函数内存结构是怎么样的

小编给大家分享一下C++中虚函数内存结构是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

虚函数的内存结构虚函数的内存结构

一、 基本概念

C++中的虚函数的作用主要是实现了多态的机制。
关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有"多种形态",这是一种泛型技术。
所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

二、 虚函数的定义与派生类中的重定义

class 类名
{
public:
virtual 成员函数说明;
}

class 类名:访问修饰符 基类名
{
public:
virtual 成员函数说明;
}

三、 虚函数在内存中的结构

1.我们先看一个例子

  1. #include

  2. using namespace std;


  3. class A

  4. {

  5. public:

  6. virtual void fun0() { cout << "A::fun0" << endl; }

  7. };


  8. int main(void)

  9. {

  10. A a;


  11. cout << "size
    of A = " << sizeof(a) << endl;


  12. return 0;

  13. }

结果:size of A = 4

2.如果再添加一个虚函数
virtual void fun1() { cout << "A::fun1" << endl; }

得到相同的结果。如果去掉函数前面的virtual修饰符 结果:size of A = 1

3.在看下面的结果

  1. #include

  2. using namespace std;


  3. class A

  4. {

  5. public:

  6. virtual void fun0() { cout << "A::fun0" << endl; }

  7. int a;

  8. int b;

  9. };


  10. int main(void)

  11. {

  12. A a;


  13. cout << "size
    of A = " << sizeof(a) << endl;


  14. return 0;

  15. }

结果:size of A = 12
在 lip32 平台下指针在内存中占4个字节,虚函数在一个虚函数表(VTABLE)中保存函数地址。

在看下面例子:

  1. #include

  2. using namespace std;


  3. class A

  4. {

  5. public:

  6. virtual void fun0() { cout << "A::fun0" << endl; }

  7. virtual void fun1() { cout << "A::fun1" << endl; }

  8. };


  9. int main(void)

  10. {

  11. A a;


  12. cout << "size
    of A = " << sizeof(a) << endl;


  13. return 0;

  14. }

结果:
size of A = 4

4.我们再来看看继承中虚函数的内存结构

先看下面的例子

  1. #include

  2. using namespace std;


  3. class A

  4. {

  5. public:

  6. virtual void fun0() { cout << "A::fun0" << endl; }

  7. };


  8. class B

  9. {

  10. public:

  11. virtual void fun0() { cout << "B::fun0" << endl; }

  12. };


  13. class C

  14. {

  15. public:

  16. virtual void fun0() { cout << "C::fun0" << endl; }

  17. };


  18. class D : public A, public B, public C

  19. {};


  20. int main(void)

  21. {

  22. D d;


  23. cout << "size
    of D = " << sizeof(d) << endl;


  24. return 0;

  25. }

结果:size is = 12


以上是"C++中虚函数内存结构是怎么样的"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

函数 内存 结果 结构 技术 指针 C++ 例子 成员 篇文章 类名 多态 内容 决议 就是 要么 面的 相同 说白了 不怎么 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 监控服务器什么系统 人社网络安全工作汇报 天津食品行业进口软件服务器软件 全国大学生网络安全竞赛规则 数据库定义int有什么问题 网络技术必备知识 软件开发相关的岗位 日本软件开发工程师工资多少 小米链——互联网科技公司 网络安全专项设立初衷 唐山网络安全教育平台 苏州通用软件开发资费 网络技术的利弊英语作文题目 南充市慧德网络技术有限公司 网络安全事件分几种 网络技术安全管理员 软件开发职业评级试题 河南大数据服务器机箱厂 海康流媒体服务器怎么转发公网 上海医格网络技术 随着网络技术寻梦发展 逃离塔科夫法国服务器怎么样 switch服务器保存数据 网络安全建设工程 网络安全哪个技术最吃香 华中科技大学网络安全学院鲁宏伟 怎样改变数据库中的关系是 软件开发都设计什么 如何注册一个手机服务器 网络安全f防范教育
0