欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

 更新時間:2021年08月25日 11:04:27   作者:yunshouhu  
這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
#include <iostream>
using namespace std;
/**
1. c++的類中成員若不加修飾符的話,默認是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;//不加修飾符的話,默認是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;//不加修飾符的話,默認是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;
}

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • OpenCV圖像輪廓提取的實現(xiàn)

    OpenCV圖像輪廓提取的實現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • c語言中缺省參數(shù)的類型總結(jié)

    c語言中缺省參數(shù)的類型總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于c語言中缺省參數(shù)的類型總結(jié)內(nèi)容,有興趣的朋友們可以跟著學習參考下。
    2021-09-09
  • FFmpeg實現(xiàn)多線程編碼并保存mp4文件

    FFmpeg實現(xiàn)多線程編碼并保存mp4文件

    這篇文章主要為大家介紹了FFmpeg如何持續(xù)的從指定內(nèi)存中讀取原始數(shù)據(jù),再將解碼數(shù)據(jù)存入隊列中,并通過單獨的線程進行編碼,最后保存為mp4文件,感興趣的可以了解下
    2023-08-08
  • C++11中多線程編程-std::async的深入講解

    C++11中多線程編程-std::async的深入講解

    這篇文章主要給大家介紹了關(guān)于C++11中多線程編程-std::async的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 一文搞懂C++中的運算符重載

    一文搞懂C++中的運算符重載

    這篇文章主要為大家詳細介紹了C++中的運算符重載的相關(guān)資料,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2022-09-09
  • C++ 反射機制詳解及實例代碼

    C++ 反射機制詳解及實例代碼

    這篇文章主要介紹了C++ 反射機制詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作

    C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++11關(guān)于auto關(guān)鍵字的使用示例

    C++11關(guān)于auto關(guān)鍵字的使用示例

    今天小編就為大家分享一篇關(guān)于C++11關(guān)于auto關(guān)鍵字的使用示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++深淺拷貝和寫時拷貝圖文詳解

    C++深淺拷貝和寫時拷貝圖文詳解

    這篇文章主要給大家介紹了關(guān)于C++深淺拷貝和寫時拷貝的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • c++ 寫注冊表方式讓程序開機自啟動

    c++ 寫注冊表方式讓程序開機自啟動

    這篇文章主要介紹了c++ 寫注冊表方式讓程序開機自啟動,需要的朋友可以參考下
    2017-09-09

最新評論