首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

彻底懂得C++虚函数、虚继承

2012-09-16 
彻底了解C++虚函数、虚继承一直以来,c的虚函数以及虚继承令人讨厌。下面通过程序彻底了解c的虚函数以及虚继

彻底了解C++虚函数、虚继承

一直以来,c++的虚函数以及虚继承令人讨厌。下面通过程序彻底了解c++的虚函数以及虚继承。

继续考虑虚继承对类size的影响。

继承类虚拟继承基类时,继承类的size变成4,这是为什么???

彻底懂得C++虚函数、虚继承

而考虑菱形结构的虚继承的另外一种方式:

继承类虚拟继承基类时,继承类的size变成4,这是为什么???

彻底懂得C++虚函数、虚继承

菱形虚拟继承的常见方式:

继承类虚拟继承基类时,继承类的size变成4,这是为什么???

彻底懂得C++虚函数、虚继承

接着考虑,基类中有虚函数,无虚继承的情况:

前面都是对称的情况,下面考虑一些非对称的情形。例如:基类B1中无虚函数,而B2、B3有虚函数,无虚继承

基类中无虚函数,继承类中有虚函数

B1无虚函数,B2、B3虚继承B1,D继承B2、B3为public

B1有虚函数,B2、B3虚继承B1,并且B2、B3没有虚函数,D继承B2、B3为public,D中没有虚函数

B1含有虚函数,B2和B3虚继承B1,B2和B3也含有虚函数,D公共继承B2和B3,此时D有无虚函数无所谓

B1含有虚函数,B2和B3公共继承B1(此时B2和B3有无虚函数无所谓),D虚拟继承B2、B3,那么D有无虚函数对D有影响

D中无虚函数,各个类的size如左下图

彻底懂得C++虚函数、虚继承

如果D中有虚函数,各个类的size如右上图,具体的类结构见下图:
彻底懂得C++虚函数、虚继承

B2和B3虚拟继承B1(此时B1有无虚函数有影响),D虚拟继承B2、B3,那么B2、B3、D有无虚函数对B2、B3、都有D有影响

彻底懂得C++虚函数、虚继承

上面的两个结果为类D中有无成员方法V3()的结果,有V3时D的size为28,没有V3时D的size为24.而在B1、B2、B3中有无非虚成员方法对各个类无影响。

彻底懂得C++虚函数、虚继承

彻底懂得C++虚函数、虚继承

上面的两个结果为类D有虚函数,并且D中有无成员方法V3()的结果,有V3时D的size为28,没有V3时D的size为24.而在B1、B2、B3中有无非虚成员方法对各个类无影响。

 

热点排行