struct和class區別
- 關於函數:在C語言中,定義是面向過程的,所以,數據和操作都是分開的,C語言中的struct不能寫函數,而C++中則可以
- 關於繼承:繼承只能是在C++中,struct 默認的是public,而class 默認的是private,在c++ 的class中,數據是具有隱私的,默認情況下,不能讓其他人進行訪問的。構造函數必須是public的。
struct和union區別
- 儲存:編譯器會對struct每個成員分配內存,而union則只會對最後一個成員進行儲存,所用成員共享內存。
- 修改值:對於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; }
- 內存對齊方式:對於union來說呢,佔用的內存是最大類型,同時要考慮對齊方式,應該是對齊字節的整數倍;
#include<iostream> using namespace std; union A { char a[13]; int b; }; int main() { cout << "union A 的大小是:" << sizeof(A) <<"字節"<< endl; return 0; }
-
對齊方式是int的4字節,最大的內存是13,所以結果是16
-
-
struct按照順序放置元素,每次期望下一個採用上一個的內存大小,如果不夠,則增加。
-
#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; }