您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++類結(jié)構(gòu)體的大小和構(gòu)造順序”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++類結(jié)構(gòu)體的大小和構(gòu)造順序”吧!
#include <iostream> using namespace std; /** 1. c++的類中成員若不加修飾符的話,默認(rèn)是private 2. 調(diào)用構(gòu)造函數(shù)時,先遞歸調(diào)用最頂級的父類構(gòu)造函數(shù),再依次到子類的構(gòu)造函數(shù)。 3. 調(diào)用析構(gòu)函數(shù)時相反,先調(diào)用最底層的子類析構(gòu)函數(shù),再依次到父類的構(gòu)造函數(shù)。 4. 空類的sizeof(A)大小為1,多個空類繼承后的子類大小也是1 */ class A{ public: A() { cout<<"A constructor"<<endl; } ~A() { cout<<"A destructor"<<endl; } }; class B:A{ public: B() { cout<<"B constructor"<<endl; } ~B() { cout<<"B destructor"<<endl; } }; class C:B{ public: C() { cout<<"C constructor"<<endl; } ~C() { cout<<"C destructor"<<endl; } virtual void eat()=0;//純虛函數(shù)會存在一個虛函數(shù)指針。64bit系統(tǒng)上故大小為8 }; class D:B{ void eat() { cout<<"D eat"<<endl; } }; class E:B{ int age;//不加修飾符的話,默認(rèn)是private public: int num; E(int a,int b):age(a),num(b){ cout<<"E constructor"<<endl; }; ~E() { cout<<"E destructor"<<endl; } void eat() { cout<<"E eat"<<endl; } }; class F:C{ //繼承的類中有虛函數(shù),存在一個虛函數(shù)指針,64bit系統(tǒng)上占8字節(jié) int age;//不加修飾符的話,默認(rèn)是private public: int num; F(int a,int b):age(a),num(b){ cout<<"F constructor"<<endl; }; ~F() { cout<<"F destructor"<<endl; } void eat() { cout<<"F eat"<<endl; } }; //C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序、析構(gòu)順序的測試。 int main() { cout<<"run"<<endl; cout<<"sizeof(A)="<<sizeof(A)<<endl;//大小為1 cout<<"sizeof(B)="<<sizeof(B)<<endl;//大小為1 cout<<"sizeof(C)="<<sizeof(C)<<endl;//虛函數(shù)會存在一個虛函數(shù)指針。64bit系統(tǒng)上故大小為8 cout<<"sizeof(D)="<<sizeof(D)<<endl;//大小為1,非虛函數(shù)不占用類大小。 cout<<"sizeof(E)="<<sizeof(E)<<endl;//大小為4+4 E e(11,22); cout<<"e.num="<<e.num<<endl; E* e2=new E(33,44); cout<<"e2->num="<<e2->num<<endl; delete e2; cout<<"sizeof(F)="<<sizeof(F)<<endl;//大小為8+4+4 F f(55,66); cout<<"f.num="<<f.num<<endl; f.eat(); return 0; }
感謝各位的閱讀,以上就是“C++類結(jié)構(gòu)體的大小和構(gòu)造順序”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C++類結(jié)構(gòu)體的大小和構(gòu)造順序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。