一文梳理struct、union、class區別

struct和class區別

  1. 關於函數:在C語言中,定義是面向過程的,所以,數據和操作都是分開的,C語言中的struct不能寫函數,而C++中則可以
  2. 關於繼承:繼承只能是在C++中,struct 默認的是public,而class 默認的是private,在c++ 的class中,數據是具有隱私的,默認情況下,不能讓其他人進行訪問的。構造函數必須是public的。

struct和union區別

  1. 儲存:編譯器會對struct每個成員分配內存,而union則只會對最後一個成員進行儲存,所用成員共享內存。
  2. 修改值:對於union來說,修改成員的值時,由於共享內存,會對其他成員進行重寫,而struct則互不影響。
    #include<iostream>
    using namespace std;
    union A
    {
    	int a;
    	int b;
    };
    int main()
    {
    	cout << "union A 的大小是:" << sizeof(A) <<"字節"<< endl;
    	A a;
    	a.a = 0;
    	cout << "a = " << a.a << ", b = "<<a.b << endl;
    	a.b = 1;
    	cout << "a = " << a.a <<", b = " << a.b << endl;
    	return 0;
    }

  3. 內存對齊方式:對於union來說呢,佔用的內存是最大類型,同時要考慮對齊方式,應該是對齊字節的整數倍;
    #include<iostream>
    using namespace std;
    union A
    {
    	char a[13];
    	int b;
    };
    int main()
    {
    	cout << "union A 的大小是:" << sizeof(A) <<"字節"<< endl;
    	return 0;
    }

    1. 對齊方式是int的4字節,最大的內存是13,所以結果是16

  4. struct按照順序放置元素,每次期望下一個採用上一個的內存大小,如果不夠,則增加。

  5. #include<iostream>
    using namespace std;
    struct s1
    {
    	char a;
    	double b;
    	int c;
    	char d;
    };
    
    struct s2
    {
    	char a;
    	char b;
    	int c;
    	double d;
    };
    int main()
    {
    	cout << sizeof(s1) << endl; // 24
    	cout << sizeof(s2) << endl; // 16
    	return 0;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章