結構
我們如果要儲存一個學生的基本資料
string name = "Bob";
int age = 17;
float weight = 175.6;
bool isDead = false;
那如果要儲存一整個班的資料,要怎麼辦呢?
格式:
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
*/
用來在物件建立時初始化資料成員,常見用法包括:
// 帶參數的建構子(使用初始化列表)
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}; // 使用帶參數的建構子
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("班日");
}
/*
輸出結果:
貝絲正在走路
貝絲正在吃班日
*/