c++
結構
結構是什麼?
我們如果要儲存一個學生的基本資料
舉個栗子
string name = "Bob";
int age = 17;
float weight = 175.6;
bool isDead = false;
那如果要儲存一整個班的資料,要怎麼辦呢?
- 跟函式長得很像
- 可以把不同的基本資料型態變數組合,形成新的資料型態
- 物件導向:
- 把變數視為一個物件
- 物件裡面的所有數值可以表達物件的狀態
用struct!那它到底可以幹嘛呢?
結構的用法
格式:
struct 結構名稱 {
資料型態1 變數名稱1;
資料型態2 變數名稱2;
資料型態3 變數名稱3;
};
創建結構
struct Student{
string name;
int age;
float weight;
bool isDead;
};
創建一個資料型態為 Student 的變數叫做 student1
使用結構
Student student1;
要存取 struct 型別中的某一個成員,請使用點(.)
student1.name = "Annie";
student1.age = "15";
student1.weight = "45.4";
cout << "1號同學的名字 => " << student1.name << endl;
cout << "1號同學的年紀 => " << student1.age << endl;
cout << "1號同學的體重 => " << student1.weight << endl;
在宣告的同時用「= { ... }」賦值,此舉稱為初始化
使用結構
Student student1={"beth",17,40,false};
→ 變數的順序和 struct 的定義相同
與陣列一樣,沒被初始化的變數會被初始化為 0,前提是你有把大括號寫出來
Student student2={};
Student student3;// 只有宣告,沒有初始化,因此變數值未定義
也可以把全班的學生加到一個struct陣列
使用結構
#include<iostream>
using namespace std;
struct Student{
string name;
int age;
float weight;
bool isDead;
}
int main () {
Student students[20];
students[0].name = "Annie";
students[0].age = 15;
students[0].weight = 45.4;
students[1].name = "Bob";
students[1].age = 17;
students[1].weight = 60.5;
cout << "1號同學的名字 => " << students[0].name << endl;
cout << "1號同學的年紀 => " << students[0].age << endl;
cout << "2號同學的名字 => " << students[1].name << endl;
cout << "2號同學的年紀 => " << students[1].age << endl;
}
/*
輸出結果:
1號同學的名字 => Annie
1號同學的年紀 => 15
2號同學的名字 => Bob
2號同學的年紀 => 17
*/
結構函式
- C++ 引入了物件導向與 class 的觀念,連帶導致 struct 變為一種 class,只是所有的屬性預設為 public
- 這代表 C++ 的struct 也可以有建構子(constructor)、成員函式(member function)等。
- struct:通常用來封裝「純資料」,較少包含複雜的成員函式
- class:通常用來封裝較複雜的物件
struct VS. class
建構子
- 建構子名稱必須與類別(或 struct)名稱相同,且不具有傳回值
-
用來在物件建立時初始化資料成員,常見用法包括:
- 預設建構子:無參數,用來設定初始值
- 帶參數的建構子:根據傳入參數初始化成員
// 帶參數的建構子(使用初始化列表)
Student(const string &n, int a) : name(n), age(a) {}
// 預設建構子也可以定義
Student() : name("Unknown"), age(0) {}
Student s1; // 使用預設建構子,name="Unknown", age=0
Student s2{"Alice", 20}; // 使用帶參數的建構子
- 我們可以在Student結構裡面設定一些動作
成員函式
struct Student{
string name;
int age;
float weight;
bool isDead;
void isWalking () {
cout << name << " is walking." << endl;
}
void isEating(string food) {
cout << name << " is eating " << food << endl;
}
};
- 呼叫函式
成員函式
#include<iostream>
using namespace std;
struct Student{
string name;
int age;
float weight;
bool isDead;
void isWalking () {
cout << name << "正在走路" << endl;
}
void isEating(string food) {
cout << name << "正在吃" << food << endl;
}
};
int main () {
Student student;
student.name = "貝絲";
student.isWalking();
student.isEating("班日");
}
/*
輸出結果:
貝絲正在走路
貝絲正在吃班日
*/
題目練習

c++ 小社課 第二堂
By Beth chen
c++ 小社課 第二堂
- 121