C语言中对象继承内存布局如何详细解析?

2026-05-20 01:520阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2167个文字,预计阅读时间需要9分钟。

C语言中对象继承内存布局如何详细解析?

前言+本文主要向家长介绍的是关于C++对象继承的内存布局的相关内容,分享出来供大家参考学习。在开始之前,说明一下,以下内容以W编译环境为基础。

关于单继承和多继承的简单概念,可参考此章节+以下编译环境:W

前言

本文给大家介绍的是关于C++对象继承的内存布局的相关内容,分享出来供大家参考学习,在开始之前说明下,关于单继承和多继承的简单概念可参考此文章

以下编译环境均为:WIN32+VS2015

虚函数表

对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。

首先先通过一个例子来引入虚函数表,假如现在有三个类如下:

class A //包含虚函数的类 { public: virtual void func1() {} virtual void func2() {} }; class B//空类 {}; class C //包含成员函数不包含成员变量的类 { void fun() {} }; void Test1() { cout << sizeof(A) << endl; cout << sizeof(B) << endl; cout << sizeof(C) << endl; }

就上述的代码,将会分别输出4,1,1

造成A的大小为4的原因就是:在A中存放了一个指向A类的虚函数表的指针。

阅读全文

本文共计2167个文字,预计阅读时间需要9分钟。

C语言中对象继承内存布局如何详细解析?

前言+本文主要向家长介绍的是关于C++对象继承的内存布局的相关内容,分享出来供大家参考学习。在开始之前,说明一下,以下内容以W编译环境为基础。

关于单继承和多继承的简单概念,可参考此章节+以下编译环境:W

前言

本文给大家介绍的是关于C++对象继承的内存布局的相关内容,分享出来供大家参考学习,在开始之前说明下,关于单继承和多继承的简单概念可参考此文章

以下编译环境均为:WIN32+VS2015

虚函数表

对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。

首先先通过一个例子来引入虚函数表,假如现在有三个类如下:

class A //包含虚函数的类 { public: virtual void func1() {} virtual void func2() {} }; class B//空类 {}; class C //包含成员函数不包含成员变量的类 { void fun() {} }; void Test1() { cout << sizeof(A) << endl; cout << sizeof(B) << endl; cout << sizeof(C) << endl; }

就上述的代码,将会分别输出4,1,1

造成A的大小为4的原因就是:在A中存放了一个指向A类的虚函数表的指针。

阅读全文