溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++類結構體的大小和構造順序

發布時間:2021-08-25 14:52:44 來源:億速云 閱讀:171 作者:chen 欄目:開發技術

這篇文章主要講解了“C++類結構體的大小和構造順序”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++類結構體的大小和構造順序”吧!

#include <iostream>
using namespace std;
/**
1. c++的類中成員若不加修飾符的話,默認是private
2. 調用構造函數時,先遞歸調用最頂級的父類構造函數,再依次到子類的構造函數。
3. 調用析構函數時相反,先調用最底層的子類析構函數,再依次到父類的構造函數。
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;//純虛函數會存在一個虛函數指針。64bit系統上故大小為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{
    //繼承的類中有虛函數,存在一個虛函數指針,64bit系統上占8字節
    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++關于類結構體大小和構造順序、析構順序的測試。
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;//虛函數會存在一個虛函數指針。64bit系統上故大小為8
    cout<<"sizeof(D)="<<sizeof(D)<<endl;//大小為1,非虛函數不占用類大小。
    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++類結構體的大小和構造順序”的內容了,經過本文的學習后,相信大家對C++類結構體的大小和構造順序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女