---
# System prepended metadata

title: C++_Function

---

# C++ 函式（Function）

## 1. 函式的基本概念
在 `C++` 中，函式是一個具有特定功能的代碼塊，可以多次呼叫，增加程式的模組化和可讀性。

## 2. 函式的定義與宣告

### **函式宣告（Function Declaration）**
```cpp=
// Function Declaration (函式宣告)
ReturnType FunctionName(ParameterList);
```
**說明：**
- `ReturnType`：函式的回傳類型，例如 `int`、`double` 或 `void`。
- `FunctionName`：函式名稱。
- `ParameterList`：參數列表，可以是空的或包含多個參數。

### **定義**
```cpp=
// Function Definition (函式定義)
ReturnType FunctionName(ParameterList) {
    // code....
    return 返回值;//若是void則沒有回傳值
}
```
這是函式的具體實作部分，描述函式內部的運作邏輯。

### **eg**
```cpp=
#include <iostream>
using namespace std;

//宣告和定義可以分開寫，但是但是但是，通常，宣告和定義是寫在一起的

int main() {
    int result = add(3, 5);
    cout << "3 + 5 = " << result << endl;
    return 0;
}

// 函式宣告和定義
int add(int a, int b) {
    return a + b;
}
```
**講解：**
- `add(int a, int b);` 是函式宣告，告知編譯器函式的存在。
- `int add(int a, int b) { return a + b; }` 是函式的具體實作，計算兩數相加。
- 在 `main()` 函式中，透過 `add(3, 5)` 呼叫函式並取得結果。

## 3. 參數傳遞方式

### **傳值呼叫**
```cpp=
void func(int x) {
    x = 10; // 不影響main函式程式中的變數
}
```
**講解：**
- `x` 的值被複製到函式內部，任何修改不會影響原變數，主要是因為指標等等的原因。

要影響的話要傳 `reference`，但是這裡先不說，到 `pointers` 時再做講解會更好(應該吧)，但是我會在下面放程式碼並做超簡單的講解:)。

### **傳址呼叫**
```cpp=
void func(int &x) {
    x = 10; // 影響主程式變數
}
```
**講解：**
- 透過 `&` 讓參數變成引用，函式內部修改 `x` 會影響原變數。

先懂就好XDD，在 `pointers` 講義會做細節說明。

## 4. 預設參數
```cpp=
void kurumi(string name = "狂三") {
    cout << "Hello, " << name << "!" << endl;
}
```
**講解：**
- 如果呼叫 `kurumi()` 而不提供參數，則預設值 `"狂三"` 會被使用。但是如果提供參數的話，例如 `kurumi("十香")` 那麼變數 `name` 就會被覆蓋過去。可以自行操作操作。

## 5. 遞迴函式
```cpp=
int factorial(int n) {
    if (n == 0) return 1;
    return n * factorial(n - 1);
}
```
**講解：**
- `factorial(n)` 會不斷呼叫自己，直到 `n == 0` 為止，適合處理數學遞迴問題。

因為這也是一個**超級大重點**，所以我會多開一個講義做講解的，先看過就好，別緊張030

## 6. 函式重載（Function Overloading）
```cpp=
int add(int a, int b) {
    return a + b;
}
double add(double a, double b) {
    return a + b;
}
```
**講解：**
- 兩個 `add` 函式名稱相同，但參數類型不同，這就是函式重載的概念。

這對選擇障礙患者是一個很重要的東東呢!!!。

## 7. Lambda 表達式 //這是一個超超超大重點
```cpp=
auto add = [](int a, int b) { return a + b; };
cout << add(3, 5) << endl;
```

**講解：**
- `[]` 定義 Lambda 表達式，`(int a, int b)` 指定參數，`{ return a + b; }` 定義函式體。

以上看看就好，會在之後做講義的，這真的很重要，一定要學會的東西。

> [!Note]
> 有問題可以在問題討論區提問喔 !
> 接下來會越來越複雜喔 ! ! ! !
