C++ struct
可把多個資料型態組織為新的結構型態。
宣告結構 declare struct
宣告結構型態的語法如下:
struct
- 宣告結構的關鍵字,後接struct的名稱。StructName
- struct的名稱,習慣以UpperCamelCase
命名。member_type1-3
- struct的成員型態,如int
、double
,或陣列(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的型態名稱可省略為匿名結構,但必須在後面定義變數名稱。例如下面定義一個匿名結構的變數為emp1
及emp2
。
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)。
沒有留言:
張貼留言