# 函數(function) C++ 中的函數(function)是封裝一段特定邏輯或行為的代碼塊,通過函數可以重複使用代碼,提高代碼的可讀性和模組化。函數的定義和用法包含了定義、調用(或稱呼叫)、返回值、參數的傳遞等幾個部分。下面我將詳述如何定義和使用C++函數,並附上完整範例。 ## 使用時機 1. 當要在不同地方執行邏輯相同 2. 遞迴(處理分治問題) : 主要是需要一直呼叫函式 3. 減少主程式碼的行數或分開許多複雜的演算,增加可讀性 ### 零、方塊 - 方塊位置:自定義函式 - 方塊圖片 > void  > > 其他 >  ### 一、C++ 函數的基本組成 在C++中,函數的定義包含以下部分: ```cpp= 返回值類型 函數名稱(參數列表) { // 函數主體 return 返回值; //除了void不用加,其他都需要加 } ``` :::danger 當返回函數值為`void`時,只能接`return;`,用來結束函式執行,不能接其他返回值的東西 ::: - **返回值類型**:函數執行後返回的數據類型,例如`int`、`double`、`void`(無返回值)等。 - **函數名稱**:對該函數的命名,通常使用動詞短語來描述其功能。 - **參數列表**:列出傳遞給函數的變量及其數據類型,可以為空(無參數)。 - **函數主體**:包含了函數的執行邏輯,位於大括號內。 - **return 返回值**:當函數有返回值時,使用 `return` 返回結果,若無返回值則可省略(但執行結束的路徑中一定要有返回值)。 ### 二、函數的定義和範例 下面是一個計算兩個整數之和的函數範例。 #### 範例程式碼 **檔名:main.cpp** ```cpp= #include <iostream> using namespace std; // 函數定義 int add(int a, int b) { // 返回值類型為 int int sum = a + b; // 計算和 return sum; // 返回計算結果 } int main() { int num1, num2; cout << "輸入兩個整數:"; cin >> num1 >> num2; // 呼叫函數 int result = add(num1, num2); // 輸出結果 cout << "兩數之和為:" << result << endl; return 0; } ``` ### 三、函數的使用步驟 1. **定義函數**:在主函數 `main()` 之外定義 `add` 函數,用來計算兩個整數的和。 2. **呼叫函數**:在 `main()` 函數內呼叫 `add()` 函數,將 `num1` 和 `num2` 作為參數傳遞給 `add` 函數。 3. **獲取返回值**:函數執行完成後,返回的計算結果被賦值給 `result` 變量。 4. **輸出結果**:將計算結果輸出到控制台。 ### 四、C++函數的多種參數傳遞方式 C++支持以下參數傳遞方式: 1. **值傳遞(Pass by Value)**:函數內修改參數不會影響原變量。 2. **指標傳遞(Pass by Pointer)**:函數內修改指標指向的變量會影響原變量。 3. **引用傳遞(Pass by Reference)**:類似指標傳遞,但更安全且易於使用。 #### 值傳遞的範例 ```cpp= void incrementByValue(int x) { x++; // 修改不會影響原變量 } ``` #### 指標(pointer)傳遞的範例 ```cpp= void incrementByPointer(int *x) { (*x)++; // 修改會影響原變量 } ``` #### 參考/引用(reference)傳遞的範例 ```cpp= void incrementByReference(int &x) { x++; // 修改會影響原變量 } ``` ### 五、常見的C++函數類型 1. **無返回值函數**:使用 `void` 作為返回值類型,只能接 `return;` 結束函數執行。 2. **帶返回值函數**:返回一個值,必須使用 `return` 返回結果。 3. **遞迴函數**:函數自己呼叫自己,適合處理具有遞迴結構的問題,例如費氏數列、階乘等。 #### 遞迴函數範例:計算階乘 ```cpp= int factorial(int n) { if (n <= 1) return 1; // 基本情況 else return n * factorial(n - 1); // 遞迴呼叫 } ``` ### 六、比較不同的參數傳遞方式 | 傳遞方式 | 說明 | 用法建議 | | ------------ | ------------------------------------ | -------------------------------------- | | 值傳遞 | 傳遞的是變量的***拷貝***,函數內不影響外部變量 | 適合不需修改的變量 | | 指標傳遞 | 傳遞的是變量的***地址***,可以修改原變量 | 適合需要修改的變量,特別是大型數據結構 | | 引用傳遞 | 傳遞的是變量的***引用***,方便且安全 | 推薦使用,簡潔且高效 | ### 七、總結 - 函數的定義包含返回值類型、函數名稱、參數列表和函數主體。 - 函數的參數傳遞有三種主要方式:值傳遞、指標傳遞和引用傳遞。 - 使用函數可以提高代碼的模組化,使程序更具可讀性和可維護性。 [進階版function : lambda](https://hackmd.io/IPsrETJTSKeVXchIUrgSeg)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up