sizeof 和類繼承 虛繼承 求類大小

代碼:

#include <iostream>

using namespace std;
/*
class a{
	float k;  // 4字節
	virtual void foo(){} //有一個4字節的指針指向自己的虛函數表
};
class b : virtual public a{  
	virtual void f(){}
};  有這樣的一個指針vptr_b_a,這個指針叫虛類指針,也是四個字節;還要包括類a的字節數,所以類b的字節數就求出來了。

運行結果:
8 16
*/

/*
class a{
	float k;
	virtual void foo(){}
};
class b : public a{
	virtual void f(){}
};

運行結果:
8 8
*/

/*
class a{

	virtual void foo(){}
};
class b : public a{
	virtual void f(){}
};
運行結果:
4 4
*/

class a{
	virtual void foo(){}
};
class b : virtual public a{
	virtual void f(){}
};
// 運行結果: 4 12
void main(){
	cout<<sizeof(a)<<" "<<sizeof(b)<<endl;
}
//總結: 基類不需要解釋 內存對齊  
//派生類 如果是virtual 繼承  ,有這樣的一個指針vptr_b_a,這個指針叫虛類指針,也是四個字節, 還要包括類a的字節數,
// 如果不是virtual 繼承,需要包含基類非函數成員


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章