iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Software Development

C++ 三十天學習紀錄系列 第 28

【Day 28】Self - defined Data Types

  • 分享至 

  • xImage
  •  

有碰過 python 的朋友們應該都知道,在 python 中,list 是可以存任何型態的東西,即使與前一項的形態不同也無妨,不過在 C++ 中卻不能如此操作,陣列只能存相同型態的項目,不過這有一個解決辦法,就是我們自己重新定義變數型態!在 C 語言中,有好幾種方法,不過今天我們就先針對兩種做介紹就好。

struct

定義
使用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.xA.y的值分別為 0、10。

我們可以只賦予 struct 中的其中一部分值(partial assignment)。若有經過 partial assignment的 struct,沒被賦予到值的項目會自己存為 0。但是沒有 partial assignment 的 struct 是不會自己初始化的!

值得注意的是,如果要搭配函數做使用,是要 call-by-reference,也就是傳 adress 進去(用&)。

member function
我們前面定義了一個 struct:Point,裡面存的變數xy都稱作「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 的。

typedef

這是另外一種方式,不同於 struct 的是,typedef 可以讓我們把原本就有的變數型態重新定義為新的變數型態,所以其實算是真的創造一種新的型態。

例如:

double nt = 0;
double us = 0;
us = 50;
nt = us * 28;

此時,nt值會是 1400。

這邊要給一個小建議,就是最好這個定義要放在程式碼的最上面!

那這章節的筆記就到此告一段落!


上一篇
【Day 27】C String - Practice 2
下一篇
【Day 29】Class
系列文
C++ 三十天學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言