介紹

在 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