C++關(guān)于類(lèi)結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試詳解
更新時(shí)間:2021年08月25日 11:04:27 作者:yunshouhu
這篇文章主要介紹了C++類(lèi)結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
#include <iostream> using namespace std; /** 1. c++的類(lèi)中成員若不加修飾符的話(huà),默認(rèn)是private 2. 調(diào)用構(gòu)造函數(shù)時(shí),先遞歸調(diào)用最頂級(jí)的父類(lèi)構(gòu)造函數(shù),再依次到子類(lèi)的構(gòu)造函數(shù)。 3. 調(diào)用析構(gòu)函數(shù)時(shí)相反,先調(diào)用最底層的子類(lèi)析構(gòu)函數(shù),再依次到父類(lèi)的構(gòu)造函數(shù)。 4. 空類(lèi)的sizeof(A)大小為1,多個(gè)空類(lèi)繼承后的子類(lèi)大小也是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ù)會(huì)存在一個(gè)虛函數(shù)指針。64bit系統(tǒng)上故大小為8 }; class D:B{ void eat() { cout<<"D eat"<<endl; } }; class E:B{ int age;//不加修飾符的話(huà),默認(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{ //繼承的類(lèi)中有虛函數(shù),存在一個(gè)虛函數(shù)指針,64bit系統(tǒng)上占8字節(jié) int age;//不加修飾符的話(huà),默認(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)于類(lèi)結(jié)構(gòu)體大小和構(gòu)造順序、析構(gòu)順序的測(cè)試。 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ù)會(huì)存在一個(gè)虛函數(shù)指針。64bit系統(tǒng)上故大小為8 cout<<"sizeof(D)="<<sizeof(D)<<endl;//大小為1,非虛函數(shù)不占用類(lèi)大小。 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; }
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
您可能感興趣的文章:
- C++中結(jié)構(gòu)體的類(lèi)型定義和初始化以及變量引用
- C++動(dòng)態(tài)分配和撤銷(xiāo)內(nèi)存以及結(jié)構(gòu)體類(lèi)型作為函數(shù)參數(shù)
- C++中聲明類(lèi)的class與聲明結(jié)構(gòu)體的struct關(guān)鍵字詳解
- C++結(jié)構(gòu)體struct和類(lèi)class區(qū)別詳解
- C++結(jié)構(gòu)體與類(lèi)指針知識(shí)點(diǎn)總結(jié)
- C++類(lèi)結(jié)構(gòu)體與json相互轉(zhuǎn)換
- C++結(jié)構(gòu)體與類(lèi)的區(qū)別詳情
- C++?中的?JSON?序列化和反序列化及結(jié)構(gòu)體與枚舉類(lèi)型的處理方法
- C++ 中類(lèi)(class)和結(jié)構(gòu)體(struct)的區(qū)別
相關(guān)文章
c語(yǔ)言中缺省參數(shù)的類(lèi)型總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于c語(yǔ)言中缺省參數(shù)的類(lèi)型總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-09-09FFmpeg實(shí)現(xiàn)多線(xiàn)程編碼并保存mp4文件
這篇文章主要為大家介紹了FFmpeg如何持續(xù)的從指定內(nèi)存中讀取原始數(shù)據(jù),再將解碼數(shù)據(jù)存入隊(duì)列中,并通過(guò)單獨(dú)的線(xiàn)程進(jìn)行編碼,最后保存為mp4文件,感興趣的可以了解下2023-08-08C++11中多線(xiàn)程編程-std::async的深入講解
這篇文章主要給大家介紹了關(guān)于C++11中多線(xiàn)程編程-std::async的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧簡(jiǎn)單操作
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧簡(jiǎn)單操作的相關(guān)資料,需要的朋友可以參考下2017-06-06C++11關(guān)于auto關(guān)鍵字的使用示例
今天小編就為大家分享一篇關(guān)于C++11關(guān)于auto關(guān)鍵字的使用示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12c++ 寫(xiě)注冊(cè)表方式讓程序開(kāi)機(jī)自啟動(dòng)
這篇文章主要介紹了c++ 寫(xiě)注冊(cè)表方式讓程序開(kāi)機(jī)自啟動(dòng),需要的朋友可以參考下2017-09-09