# 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] > 有問題可以在問題討論區提問喔 ! > 接下來會越來越複雜喔 ! ! ! !
×
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