AdSense

網頁

2022/7/29

C++ struct 結構簡介

C++ struct可把多個資料型態組織為新的結構型態。


宣告結構 declare struct

宣告結構型態的語法如下:

  • struct - 宣告結構的關鍵字,後接struct的名稱。
  • StructName - struct的名稱,習慣以UpperCamelCase命名。
  • member_type1-3 - struct的成員型態,如intdouble,或陣列(array)、類別(class)string、另一結構及union。結構的成員預設可公開存取(public)。
  • memberName1-3 - struct的成員名稱。

struct StructName {
    member_type1 memberName1;
    member_type2 memberName2;
    member_type3 memberName3;
    ...
};

下面宣告一個結構型態名為Employee,有三個成員:編號(id)、姓名(name)、年齡(age)。

#include <string>
using namespace std;

struct Employee {
    long id;
    string name;
    int age;
};


定義結構變數 define struct variable

結構為一種自訂型態,宣告變數時可以結構為型態。例如下面宣告變數emp的型態為Employee

main.cpp

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

struct Employee {
    long id;
    string name;
    int age;
};

int main() {
    Employee emp; // 定義變數emp型態為Employee結構

    return 0;
}


結構初始化 struct initialization

定義結構變數時可在花括弧{}設定成員變數來初始化如下,括弧中值得順序對應結構成員的順序:

main.cpp

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

struct Employee {
    long id;
    string name;
    int age;
};

int main() {
    Employee emp = {1, "John", 33};

    return 0;
}


存取結構成員 access struct members

在struct變數的後面可以.存取結構成員的值。

main.cpp

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

struct Employee {
    long id;
    string name;
    int age;
};

int main() {
    Employee emp = {1, "John", 33};

    cout << emp.id << endl;   // 1
    cout << emp.name << endl; // John
    cout << emp.age << endl;  // 33

    emp.age = 34;
    cout << emp.age << endl; // 34

    return 0;
}


巢狀結構 nested struct

結構中的成員也可以是結構,例如下面的Employee.dept成員型態為結構Department

main.cpp

#include <iostream>
#include <string>
using namespace std;
struct Department {
    long id;
    string name;
};

struct Employee {
    long id;
    string name;
    int age;
    Department dept;
};

int main() {
    Employee emp = {1, "John", 33, Department{2, "HR"}};

    cout << emp.Dept.id << endl;   // 2
    cout << emp.Dept.name << endl; // HR

    return 0;
}


匿名結構 anonymous struct

struct的型態名稱可省略為匿名結構,但必須在後面定義變數名稱。例如下面定義一個匿名結構的變數為emp1emp2

main.cpp

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

struct {
    long id;
    string name;
    int age;
} emp1, emp2;

int main() {
    emp1 = {1, "John", 33};
    emp2 = {2, "Mary", 28};

    cout << emp1.name << endl; // John
    cout << emp2.name << endl; // Mary

    return 0;
}


結構指標 struct pointer

存取指標指向的結構變數中的成員可利用->箭頭運算子(arrow operator)。例如下面指向結構變數emp的指標為emp_p,使用emp_p->name相當於emp.name

main.cpp

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

struct Employee {
    long id;
    string name;
    int age;
};

int main() {
    Employee emp = {1, "John", 33};
    Employee *emp_p = &emp;

    cout << emp_p->name << endl; // John
    cout << emp.name << endl;   // John

    return 0;
}


C++和Go語言的struct蠻類似的,差別在C++的struct成員皆是公開的,而Go的struct則利用命名決定成員為公開或私有,性質上較類似C++的類別(class)


沒有留言:

AdSense