【C++ 筆記】函數(Function)(上) - part 7
===
目錄(Table of Contents):
[TOC]
---
很感謝你點進來這篇文章。
你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!
函數(Function)
---
*"A function is a block of code which only runs when it is called."*。
:::success
「函數只能被呼叫來執行一個程式碼區塊。」
:::
什麼意思呢?就好比函數是一台機器,這台機器是具有輸入、輸出的概念的,假設一台機器是具有功用性的,比如說自動販賣機,功能就是給錢吐飲料。所謂的函數其實就是一台具有功能的機器。
可以輸入參數給函數,也可以設定輸出給函數。
參數可以按照剛才的例子,想成是錢,輸出則是吐飲料。
接下來進入到 C++ 的函數世界,語法如下:
```cpp=
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() 就可以囉。
:::
### 函數宣告&定義
---
```cpp=
int func(int a);
```
以上這是函數單純的宣告,尚未進行定義。
如果我們要進行下一步的定義,如下:
```cpp=
#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 點我看答案(自己先想一想)
因為如果是大型專案,你直接定義函數會容易發生「未定義函數」的錯誤,而且這樣做也能增加**程式碼的結構清晰度**,達到模組化設計的目的。
這無論是在軟體工程還是任何領域當中,都是相當重要的細節。
:::
以下是一個範例:
```cpp=
#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;
}
```
### 參數預設值
---
我們可以為函數當中的參數設定預設值,如果我們沒有輸入值進去的話,則預設使用這個數字。
以下是個範例:
```cpp=
#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
輸出結果:
```
Total value is :300
Total value is :120
```
總結
---
### 函數的定義與概念
---
函數是一段在被呼叫時執行的程式碼區塊,可以理解為一台具有輸入和輸出的機器。函數的基本結構包括回傳值類型、函數名稱和參數列表,語法如下:
```cpp=
return_type function_name(parameter list) {
body of the function
}
```
* return_type:函數的回傳值類型,若不需要回傳則使用 void。
* function_name:函數的名稱,需遵循命名規則。
* parameter list:可以設定一個或多個參數,需指定資料型態。
### 函數的宣告與定義
---
函數可以先宣告再定義,宣告只需一行並以分號結尾,而定義則包含函數的具體實現。直接定義函數雖然可行,但在大型專案中,先宣告有助於避免「未定義函數」的錯誤並提高程式碼結構的清晰度。
### 參數預設值
---
C++ 允許為函數的參數設定預設值,當呼叫函數時如果未提供該參數,則使用預設值。例如:
```cpp=
int sum(int a, int b=20) {
return a + b;
}
```
這樣可以在呼叫 `sum(a)` 時,自動使用 `b=20` 作為預設值。
參考資料
---
[C++ Functions](https://www.w3schools.com/cpp/cpp_functions.asp)
[Day07 - C++ function (函式\函數) iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天](https://ithelp.ithome.com.tw/m/articles/10293582)
[C++ 函数 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-functions.html)