介紹
在 C++ 中,struct 是一種用户自定義的數據類型,用於將多個相關的數據(和函數)組合在一起。
- 與 class 幾乎相同
- 唯一區別:struct 的默認訪問權限是 public,而 class 默認是 private。
- 兩者都支持成員函數、構造函數、繼承、虛函數等面向對象特性。
- 常用於表示“數據聚合”
- 當一個類型主要用於存儲數據(而非封裝複雜行為)時,習慣用 struct
結構體:封裝一些基本類型用於我們自定義的類型
/*
班級管理系統:56個同學,編號,年齡,性別,成績
聊天會話
*/
#include<iostream>
using namespace std;
struct student {
string id;
string name;
int age;
string sex;
double scorce;
};
int main() {
// 結構體的使用
struct student student1;
student1.id = "00001";
student1.name = "xaye";
student1.age = 27;
student1.sex = "男";
student1.scorce = 99;
// 使用
cout << "id: " << student1.id << ", name: " << student1.name << ", age: " <<
student1.age << ", sex: " << student1.sex << ", scorce: " << student1.scorce << endl;
struct student student2;
student2.id = "00002";
student2.name = "xaye2";
student2.age = 37;
student2.sex = "男";
student2.scorce = 100;
// 使用
cout << "id: " << student2.id << ", name: " << student2.name << ", age: " <<
student2.age << ", sex: " << student2.sex << ", scorce: " << student2.scorce << endl;
return 0;
}
xaye@orange:~/code/dev/11$ ./a.out
id: 00001, name: xaye, age: 27, sex: 男, scorce: 99
id: 00002, name: xaye2, age: 37, sex: 男, scorce: 100
C++ 中 struct 和 class 幾乎一樣!
根據語義選擇:
純數據 → struct,對於被動的數據結構,使用 struct
封裝對象 → class,對於有不變式(invariants)和複雜行為的對象,使用 class
初始化方式
聲明方式 2
#include<iostream>
using namespace std;
struct student {
string id;
string name;
int age;
string sex;
double scorce;
} student1;
int main() {
// 結構體的使用, 此處的 struct 不加也可以,好像是高一點的C++版本可以
// struct student student1 = {
// "00001","xaye",27,"男",99
// };
student1.id = "00001";
student1.name = "xaye";
student1.age = 27;
student1.sex = "男";
student1.scorce = 99;
// 使用
cout << "id: " << student1.id << ", name: " << student1.name << ", age: " <<
student1.age << ", sex: " << student1.sex << ", scorce: " << student1.scorce << endl;
return 0;
}
聲明方式 3
#include<iostream>
using namespace std;
struct student {
string id;
string name;
int age;
string sex;
double scorce;
} student1;
int main() {
// 結構體的使用, 此處的 struct 不加也可以,好像是高一點的C++版本可以
// struct student student1 = {
// "00001","xaye",27,"男",99
// };
student1.id = "00001";
student1.name = "xaye";
student1.age = 27;
student1.sex = "男";
student1.scorce = 99;
// 使用
cout << "id: " << student1.id << ", name: " << student1.name << ", age: " <<
student1.age << ", sex: " << student1.sex << ", scorce: " << student1.scorce << endl;
return 0;
}
聲明方式 4
#include<iostream>
using namespace std;
struct student {
string id;
string name;
int age;
string sex;
double scorce;
} student1 = {
"00001","xaye",27,"男",99
};
int main() {
// 結構體的使用, 此處的 struct 不加也可以,好像是高一點的C++版本可以
// struct student student1 = {
// "00001","xaye",27,"男",99
// };
// 使用
cout << "id: " << student1.id << ", name: " << student1.name << ", age: " <<
student1.age << ", sex: " << student1.sex << ", scorce: " << student1.scorce << endl;
return 0;
}
輸出
xaye@orange:~/code/dev/11$ ./a.out
id: 00001, name: xaye, age: 27, sex: 男, scorce: 99