C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試詳解
更新時(shí)間:2021年08月25日 11:04:27 作者:yunshouhu
這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
#include <iostream>
using namespace std;
/**
1. c++的類中成員若不加修飾符的話,默認(rèn)是private
2. 調(diào)用構(gòu)造函數(shù)時(shí),先遞歸調(diào)用最頂級(jí)的父類構(gòu)造函數(shù),再依次到子類的構(gòu)造函數(shù)。
3. 調(diào)用析構(gòu)函數(shù)時(shí)相反,先調(diào)用最底層的子類析構(gòu)函數(shù),再依次到父類的構(gòu)造函數(shù)。
4. 空類的sizeof(A)大小為1,多個(gè)空類繼承后的子類大小也是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;//不加修飾符的話,默認(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ù),存在一個(gè)虛函數(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)順序的測(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ù)不占用類大小。
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)體的類型定義和初始化以及變量引用
- C++動(dòng)態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù)
- C++中聲明類的class與聲明結(jié)構(gòu)體的struct關(guān)鍵字詳解
- C++結(jié)構(gòu)體struct和類class區(qū)別詳解
- C++結(jié)構(gòu)體與類指針知識(shí)點(diǎn)總結(jié)
- C++類結(jié)構(gòu)體與json相互轉(zhuǎn)換
- C++結(jié)構(gòu)體與類的區(qū)別詳情
- C++?中的?JSON?序列化和反序列化及結(jié)構(gòu)體與枚舉類型的處理方法
- C++ 中類(class)和結(jié)構(gòu)體(struct)的區(qū)別
相關(guān)文章
FFmpeg實(shí)現(xiàn)多線程編碼并保存mp4文件
這篇文章主要為大家介紹了FFmpeg如何持續(xù)的從指定內(nèi)存中讀取原始數(shù)據(jù),再將解碼數(shù)據(jù)存入隊(duì)列中,并通過(guò)單獨(dú)的線程進(jìn)行編碼,最后保存為mp4文件,感興趣的可以了解下2023-08-08
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧簡(jiǎn)單操作
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧簡(jiǎn)單操作的相關(guān)資料,需要的朋友可以參考下2017-06-06
C++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-12
c++ 寫(xiě)注冊(cè)表方式讓程序開(kāi)機(jī)自啟動(dòng)
這篇文章主要介紹了c++ 寫(xiě)注冊(cè)表方式讓程序開(kāi)機(jī)自啟動(dòng),需要的朋友可以參考下2017-09-09

