# Struct ## **1. 什麼是 `struct`?** 在 `C++` 中,`struct`(結構體)是一種自訂資料型別,可以用來封裝多個**變數**,通常用於表示一個物件的屬性。 ## **2. `struct` 的基本語法** ```cpp= struct 結構名稱 { 資料類型 變數名稱; // 可以有多個成員變數 }; ``` - `struct` 是關鍵字(就像`cout`、`cin`),用來定義結構體。 - `結構名稱` 是結構體的名稱。(看心情取,只要不違反變數宣告規則的都可以) - `{}` 內部包含多個成員變數。 - `;` 代表結構定義的結束。(一定要記得加) 用實例代替大概就是以下這樣 **基本範例** ```cpp= #include <iostream> using namespace std; struct Person { string name; //字串變數 int age; //整數變數 }; int main() { Person p1 = {"Alice", 25}; //賦值 cout << "Name: " << p1.name << ", Age: " << p1.age << endl; return 0; } ``` **輸出:** ``` Name: Alice, Age: 25 ``` ## **3. 初始化 `struct`** ### **方法 1:大括號初始化** ```cpp= Person p1 = {"Bob", 30}; ``` ### **方法 2:指定成員初始化(C++11 以上)** ```cpp= Person p2 { .name = "Charlie", .age = 22 }; ``` ## **4. `struct` 陣列** 可以使用 `struct` 陣列來存放多個相同類型的結構體。 ### 怎麼宣告?? ```cpp struct 結構名稱 { 資料類型 變數名稱; // code... } 變數名稱[陣列大小]; //塞在struct屁股後面 ``` - 可以在 `struct` 宣告的尾端直接定義陣列變數。 ### **範例** ```cpp #include <iostream> using namespace std; struct Person { string name; int age; } people[3] = { // 直接宣告陣列並初始化 {"Alice", 25}, {"Bob", 30}, {"Charlie", 22} }; int main() { for (const Person &p : people) { //遍歷 cout << "Name: " << p.name << ", Age: " << p.age << endl; } return 0; } ``` **輸出:** ``` Name: Alice, Age: 25 Name: Bob, Age: 30 Name: Charlie, Age: 22 ``` 但是,妳也可以這樣寫 ```cpp= #include <iostream> using namespace std; struct Person { string name; int age; }; int main() { Person people[3] = { {"Alice", 25}, {"Bob", 30}, {"Charlie", 22} }; for (const Person &p : people) { cout << "Name: " << p.name << ", Age: " << p.age << endl; } return 0; } ``` **輸出:** ``` Name: Alice, Age: 25 Name: Bob, Age: 30 Name: Charlie, Age: 22 ``` ## **5. `struct` 內的函式** ```cpp= #include <iostream> using namespace std; struct Person { string name; int age; void introduce() { cout << "Hi, I'm " << name << " and I'm " << age << " years old." << endl; } }; int main() { Person p = {"David", 28}; p.introduce(); return 0; } ``` 就跟普通函式差不多,但還是有差。 至於細部解說會另開一篇講義。 **輸出:** ``` Hi, I'm David and I'm 28 years old. ``` ## **6. `struct` 指標與動態記憶體** ```cpp= #include <iostream> using namespace std; struct Person { string name; int age; }; int main() { Person *p = new Person{"Eve", 24}; //new技術會在pointers講義做解說 cout << "Name: " << p->name << ", Age: " << p->age << endl; delete p; return 0; } ``` **輸出:** ``` Name: Eve, Age: 24 ``` ## **7. `struct` 與 `class` 的區別** 可能有些電神已經知道 `class` 這東東了,他也是一種**結構體**,之後會在開講義解說喔!! | `struct` | `class` | |----------|--------| | 成員預設為 `public` | 成員預設為 `private` | | 適用於簡單資料結構 | 適用於封裝更完整的物件 | # 😊 如果要記,那可以把 `struct` 記成一種自訂義的 `type` (資料型態)。 ## 怎麼輸入呢?? ### 1.直接輸入數值到 struct 你可以在 `main()` 裡直接為 `struct` 變數的成員賦值: ```cpp= #include <iostream> using namespace std; struct Point { int x, y; }; int main() { Point p1; cout << "輸入 x: "; cin >> p1.x; // 直接輸入數值到 p1.x cout << "輸入 y: "; cin >> p1.y; // 直接輸入數值到 p1.y cout << "Point(" << p1.x << ", " << p1.y << ")" << endl; } ``` 📌 這樣 `cin` 會從鍵盤讀取數值並存入 `p1.x` 和 `p1.y`。 ### 2.使用 main() 裡的變數來賦值 你也可以使用 `main()` 裡的變數來賦值給 `struct` 成員: ```cpp= #include <iostream> using namespace std; struct Point { int x, y; }; int main() { int a, b; // main() 裡的變數 cout << "輸入 a: "; cin >> a; cout << "輸入 b: "; cin >> b; Point p1; p1.x = a; // 使用 main 裡的變數 a p1.y = b; // 使用 main 裡的變數 b cout << "Point(" << p1.x << ", " << p1.y << ")" << endl; } ``` 這樣 `a` 和 `b` 先接收輸入的值,然後再存入 `struct` 的變數中。