C++中的結構體初始化的多種方式

海_纳百川發表於2024-11-23

在 C++ 中,結構體(struct)是用於組合多個變數(可以是不同型別)的資料型別。以下是建立結構體並賦值的基本方法:


1. 定義結構體並賦值

示例程式碼:

#include <iostream>
#include <string>
using namespace std;

// 定義結構體
struct Person {
    string name;
    int age;
    float height;
};

int main() {
    // 初始化並賦值方式 1:列表初始化
    Person person1 = {"Alice", 25, 5.6};

    // 初始化並賦值方式 2:分步賦值
    Person person2;
    person2.name = "Bob";
    person2.age = 30;
    person2.height = 6.0;

    // 輸出結果
    cout << "Person 1: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
    cout << "Person 2: " << person2.name << ", " << person2.age << " years old, " << person2.height << " ft" << endl;

    return 0;
}

2. 用建構函式賦值(C++11 起支援)

在 C++ 中,結構體可以像類一樣定義建構函式,用來更方便地初始化。

示例程式碼:

#include <iostream>
#include <string>
using namespace std;

// 定義結構體
struct Person {
    string name;
    int age;
    float height;

    // 建構函式
    Person(string n, int a, float h) : name(n), age(a), height(h) {}
};

int main() {
    // 使用建構函式初始化
    Person person1("Charlie", 28, 5.9);

    // 輸出結果
    cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;

    return 0;
}

3. 動態分配結構體

如果需要在堆上動態分配結構體,可以使用 new 關鍵字。

示例程式碼:

#include <iostream>
#include <string>
using namespace std;

// 定義結構體
struct Person {
    string name;
    int age;
    float height;
};

int main() {
    // 動態分配
    Person* person = new Person{"Daisy", 22, 5.7};

    // 輸出結果
    cout << "Person: " << person->name << ", " << person->age << " years old, " << person->height << " ft" << endl;

    // 釋放記憶體
    delete person;

    return 0;
}

4. C++20 起支援聚合初始化增強

在 C++20 中,可以使用設計器語法designated initializers)來更明確地初始化結構體的成員。

示例程式碼:

#include <iostream>
#include <string>
using namespace std;

// 定義結構體
struct Person {
    string name;
    int age;
    float height;
};

int main() {
    // 使用 C++20 的設計器語法
    Person person1 = {.name = "Eve", .age = 26, .height = 5.8};

    // 輸出結果
    cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;

    return 0;
}

總結:

  1. 可以透過直接賦值或列表初始化對結構體賦值。
  2. 使用建構函式可以使程式碼更清晰。
  3. 動態分配適用於需要靈活管理記憶體的場景。
  4. C++20 的設計器語法增強了可讀性。

相關文章