设为首页 加入收藏

TOP

怎么计算C++继承、虚继承、虚函数类的大小?(三)
2018-03-09 09:08:01 】 浏览:356
Tags:怎么 计算 继承 函数 大小

}

评注:此时sonClass2的大小变成40。与17不同的是,sonClass2的多重继承都是虚拟继承。sonClass2的大小由以下几部分构成:

1.自己本身的大小,char[3] 大小为4,一个虚函数,所以有个指向虚表的指针,大小为4,所以自身大小总的为8;

2.虚拟继承sonClass1,因为虚拟继承所以有个虚类指针ptr_sonClass2_sonClass1,大小为4,而sonClass1的大小为20,所以虚拟继承sonClass1的大小为24;

3.虚拟继承VirtualInheritance2,一个虚类指针ptr_sonClass2_VirtualInheritance2=ptr_sonClass2_sonClass1+偏移量,该指针和ptr_sonClass2_sonClass1公用一个指针,只是偏移量不同,所以大小为0(即使再多继承几个virtual class,这个指针的大小只算 一次),而VirtualInheritance2的大小为8,所以总的大小为8。

所以40=8+24+8

总结:

1,普通单继承,只需将自身成员变量的大小加上父类大小(父类中 有虚函数,子类中不管有没有)若父类没有虚函数,则子类大小需要加上指向虚表的指针大小。

2,普通多继承,若几个父类都有虚表,则子类与第一个父类公用一个虚表指针,其他有几个有虚函数的父类则就有几个虚表指针。

3,虚拟单继承,此时若子类有虚函数则加上一个自身的虚表指针的大小,(若没有则不加)再加上自身的成员变量大小,还要加上一个虚类指针ptr_sonclass_fatherclass,最后加上父类的大小。

4,多重虚拟继承,此时若子类有虚函数则加上一个自身的虚表指针的大小,(若没有则不叫)再加上自身的成员变量大小,还要加上 一个公用的虚类指针(不管有几个虚拟父类,只加一个),在加上所有父类的大小。

5、普通、虚拟混合多继承,此时子类的大小为自身大小(若子类或普通父类有虚函数,则为成员变量+虚表指针大小;若都没虚函数,则就为成员变量大小),加上一个虚类指针大小,在加上虚拟父类的大小,在加上普通父类的大小(除虚表指针,因为它和子类公用一个虚表指针)。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++ 中友元函数的使用介绍 下一篇C++ 旧式转型、类型转型方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目