有碰過 python 的朋友們應該都知道,在 python 中,list 是可以存任何型態的東西,即使與前一項的形態不同也無妨,不過在 C++ 中卻不能如此操作,陣列只能存相同型態的項目,不過這有一個解決辦法,就是我們自己重新定義變數型態!在 C 語言中,有好幾種方法,不過今天我們就先針對兩種做介紹就好。
定義
使用struct,我們可以把各種不同型態的東西組合起來,不論是整數、指標或陣列,甚至其他自定義變數型態。
宣告
當要宣告一個 struct 的時候,就以Name
variable
呼叫。
使用
而如果要呼叫或使用 struct 中的東西時,則要使用 struct variable
.attribute name
,中間使用一個點.
。
例如:
// 定義
struct Point {
int x;
int y;
}
// 宣告
Point A, B;
// 使用
A.x = 0;
A.y = A.x + 10;
以這個例子來看,A.x
、A.y
的值分別為 0、10。
我們可以只賦予 struct 中的其中一部分值(partial assignment)。若有經過 partial assignment的 struct,沒被賦予到值的項目會自己存為 0。但是沒有 partial assignment 的 struct 是不會自己初始化的!
值得注意的是,如果要搭配函數做使用,是要 call-by-reference,也就是傳 adress 進去(用&
)。
member function
我們前面定義了一個 struct:Point,裡面存的變數x
、y
都稱作「member variable」我們也可以在 Point 的定義中放函數,稱作「member function」。例如:
struct Point {
int x;
int y;
double distOri() {
return sqrt(pow(x, 2) + pow(y, 2));
}
};
int main() {
Point a = (3, 4);
cout << a.distOri();
return 0;
}
備註:使用 sqrt、pow 等函數前,程式碼頂端要加#include<cmath>
。
這樣是在 struct 裡面定義member function,我們也可以在 struct 外面定義:
struct Point {
int x;
int y;
double distOri();
};
double Point::distOri() {
return sqrt(pow(x, 2) + pow(y, 2));
}
而第二種方法是我們更 prefer 的。
這是另外一種方式,不同於 struct 的是,typedef 可以讓我們把原本就有的變數型態重新定義為新的變數型態,所以其實算是真的創造一種新的型態。
例如:
double nt = 0;
double us = 0;
us = 50;
nt = us * 28;
此時,nt
值會是 1400。
這邊要給一個小建議,就是最好這個定義要放在程式碼的最上面!
那這章節的筆記就到此告一段落!