C语言中对象继承内存布局如何详细解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2167个文字,预计阅读时间需要9分钟。
前言+本文主要向家长介绍的是关于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++对象继承的内存布局的相关内容,分享出来供大家参考学习。在开始之前,说明一下,以下内容以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类的虚函数表的指针。

