namespace test_class_size
; class b;
class c:public a,public b;
class d:virtual public a
; class e:virtual public a,virtual public b;
class f;
void test()
}namespace test_class_size2
};
struct b:virtual public a
virtual void myfunb(){}
};
struct c:virtual public a
virtual void myfunc(){}
};
struct d:public b,public c
virtual void myfund(){}
};
void test()
}namespace test_class_size3
};
struct b: public a
virtual void myfunb(){}
};
struct c: public a
virtual void myfunc(){}
};
struct d:public b,public c
virtual void myfund(){}
};
void test()
namespace test_class_size2解釋:a中
int+虛表指標(16)
。b,c中由於是虛繼承因此大小為
a+指向虛基類的指標
,b,c
雖然加入了自己的虛函式,但是虛表指標是和基類共享的,因此不會有自己的虛表指標
。d由於b,c都是
虛繼承,因此d只包含乙個a的副本
,於是d大小就等於
a+b中的指向虛基類的指標+c中的指向虛基類的指標
。(16+8+8)
namespace test_class_size3解釋:a中
int+虛表指標(16)
。d由於b,c不是
虛繼承,因此d包含兩個a的副本
,於是d大小就等於
a+a的大小
。
關於class的學習總結
類的課程學習到此就告一段落,總的說來類還是挺容易上手的,就是有很多的理論,這些理論簡而言之就是一些編寫 的規則,理解清楚後一切都不是問題。下面我就著重說一下關於class的學習總結 一 定義 class與struct大體上的使用方法相同,只是class中的資料預設為private 私有 而struc...
class的大小分析
我就從簡單的類到複雜的類逐次分析類的大小 情形1 class a 情形2 class a int a void f class b int b 類a和類b的大小事一樣的,非虛函式儲存在 區中,而沒有虛函式的虛函式數表指標需要儲存,所以其大小都是4位元組 情形3 class a int a char ...
關於類的大小問題
一直以來在各個論壇上都不時的見過一些關於類大小的討論,尤其是當涉及到虛繼承時,類的大小就變得更加撲朔迷離,每看完乙個帖子都覺得自己有所收穫,但當下次遇到類似的帖子時卻怎麼也想不起自己以前對此問題的記憶了,於是乎,乾脆勤快些一勞永逸地把他們記錄下來。純屬個人理解,難免有錯,我會定期更新這篇文章,修改其...