代碼:
#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 繼承,需要包含基類非函數成員