【C++ 筆記】函數(Function)(上) - part 7

很感謝你點進來這篇文章。

你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!

函數(Function)

“A function is a block of code which only runs when it is called.”

:::success
「函數只能被呼叫來執行一個程式碼區塊。」
:::

什麼意思呢?就好比函數是一台機器,這台機器是具有輸入、輸出的概念的,假設一台機器是具有功用性的,比如說自動販賣機,功能就是給錢吐飲料。所謂的函數其實就是一台具有功能的機器。

可以輸入參數給函數,也可以設定輸出給函數。

參數可以按照剛才的例子,想成是錢,輸出則是吐飲料。

接下來進入到 C++ 的函數世界,語法如下:

1
2
3
4
return_type function_name( parameter list )
{
body of the function
}

return_type:關於函數的回傳值,所需設定的資料型態。若不需要回傳,可填 void。(為了簡單理解,可理解 return 就是函數的輸出、回傳值)

function_name:需要注意命名的規則,同變數命名規則。

parameter list:可設定單一參數、多重參數等,可以說是”輸入值的變數”,與變數相同,需要設定資料型態在前面,後面再輸入變數名字,通常使用不會將參數設定預設值,要設定也是可以。

body of the function:一個函數被呼叫後,所要執行的程式碼。

:::success
Q:要如何呼叫函數?

A:假設函數為
int func(){
return 0;
}

呼叫時寫:func() 就可以囉。
:::

函數宣告&定義

1
int func(int a);

以上這是函數單純的宣告,尚未進行定義。

如果我們要進行下一步的定義,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>

using namespace std;

int func(int a); // 宣告

int func(int a){ // 進行定義
return a;
}

int main(){
int a;
cin >> a;
cout << func(a);
return 0;
}

差別:

  • 宣告結尾要加分號,而且只有一行。
  • 定義時加上兩個中括號,裡面就開始寫內容了。

最直接的做法其實就是省略宣告的步驟,直接定義就能做到宣告的動作了。

:::success
那我直接定義就好,幹嘛還要宣告這麼麻煩?
:::

:::spoiler 點我看答案(自己先想一想)
因為如果是大型專案,你直接定義函數會容易發生「未定義函數」的錯誤,而且這樣做也能增加程式碼的結構清晰度,達到模組化設計的目的。

這無論是在軟體工程還是任何領域當中,都是相當重要的細節。
:::

以下是一個範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;

// 函數宣告與定義:計算兩個整數的總和
int addNumbers(int a, int b) {
return a + b;
}

int main() {
int num1, num2;

cout << "請輸入第一個整數: ";
cin >> num1;
cout << "請輸入第二個整數: ";
cin >> num2;

// 呼叫 addNumbers 函數
int result = addNumbers(num1, num2);

// 輸出結果
cout << "兩數的總和是: " << result << endl;

return 0;
}

參數預設值

我們可以為函數當中的參數設定預設值,如果我們沒有輸入值進去的話,則預設使用這個數字。

以下是個範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;

int sum(int a, int b=20)
{
int result;

result = a + b;

return (result);
}

int main ()
{
int a = 100;
int b = 200;
int result;

// 呼叫函數增加值
result = sum(a, b);
cout << "Total value is :" << result << endl;

// 再次呼叫函數
result = sum(a);
cout << "Total value is :" << result << endl;

return 0;
}

來源:https://www.runoob.com/cplusplus/cpp-functions.html

輸出結果:

1
2
Total value is :300
Total value is :120

總結

函數的定義與概念

函數是一段在被呼叫時執行的程式碼區塊,可以理解為一台具有輸入和輸出的機器。函數的基本結構包括回傳值類型、函數名稱和參數列表,語法如下:

1
2
3
return_type function_name(parameter list) {
body of the function
}
  • return_type:函數的回傳值類型,若不需要回傳則使用 void。
  • function_name:函數的名稱,需遵循命名規則。
  • parameter list:可以設定一個或多個參數,需指定資料型態。

函數的宣告與定義

函數可以先宣告再定義,宣告只需一行並以分號結尾,而定義則包含函數的具體實現。直接定義函數雖然可行,但在大型專案中,先宣告有助於避免「未定義函數」的錯誤並提高程式碼結構的清晰度。

參數預設值

C++ 允許為函數的參數設定預設值,當呼叫函數時如果未提供該參數,則使用預設值。例如:

1
2
3
int sum(int a, int b=20) {
return a + b;
}

這樣可以在呼叫 sum(a) 時,自動使用 b=20 作為預設值。

參考資料

C++ Functions

Day07 - C++ function (函式\函數) iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

C++ 函数 | 菜鸟教程