
- C++ 基礎
- C++ 首頁
- C++ 概述
- C++ 環境設定
- C++ 基本語法
- C++ 註釋
- C++ Hello World
- C++ 省略名稱空間
- C++ 常量/字面量
- C++ 關鍵字
- C++ 識別符號
- C++ 資料型別
- C++ 數值資料型別
- C++ 字元資料型別
- C++ 布林資料型別
- C++ 變數型別
- C++ 變數作用域
- C++ 多個變數
- C++ 基本輸入/輸出
- C++ 修飾符型別
- C++ 儲存類
- C++ 運算子
- C++ 數字
- C++ 列舉
- C++ 引用
- C++ 日期和時間
- C++ 控制語句
- C++ 決策
- C++ if 語句
- C++ if else 語句
- C++ 巢狀 if 語句
- C++ switch 語句
- C++ 巢狀 switch 語句
- C++ 迴圈型別
- C++ while 迴圈
- C++ for 迴圈
- C++ do while 迴圈
- C++ foreach 迴圈
- C++ 巢狀迴圈
- C++ break 語句
- C++ continue 語句
- C++ goto 語句
- C++ 建構函式
- C++ 建構函式和解構函式
- C++ 複製建構函式
C++ 函式
函式是一組語句,這些語句共同執行一項任務。每個 C++ 程式至少有一個函式,即 **main()**,並且所有最簡單的程式都可以定義其他函式。
您可以將程式碼分成單獨的函式。如何將程式碼劃分為不同的函式取決於您,但邏輯上,劃分通常是每個函式執行特定任務。
函式 **宣告** 會告訴編譯器函式的名稱、返回型別和引數。函式 **定義** 提供了函式的實際主體。
C++ 標準庫提供了許多內建函式,您的程式可以呼叫這些函式。例如,函式 **strcat()** 用於連線兩個字串,函式 **memcpy()** 用於將一個記憶體位置複製到另一個位置,以及許多其他函式。
函式以各種名稱而聞名,例如方法或子例程或過程等。
定義函式
C++ 函式定義的一般形式如下所示:
return_type function_name( parameter list ) { body of the function }
C++ 函式定義由函式頭和函式體組成。以下是函式的所有部分:
**返回型別** - 函式可能會返回值。**return_type** 是函式返回的值的資料型別。某些函式在不返回值的情況下執行所需的運算。在這種情況下,return_type 是關鍵字 **void**。
**函式名稱** - 這是函式的實際名稱。函式名稱和引數列表一起構成函式簽名。
**引數** - 引數就像一個佔位符。當呼叫函式時,您將值傳遞給引數。此值稱為實際引數或引數。引數列表指的是函式的引數的型別、順序和數量。引數是可選的;也就是說,函式可能不包含任何引數。
**函式體** - 函式體包含定義函式功能的一組語句。
示例
以下是名為 **max()** 的函式的原始碼。此函式採用兩個引數 num1 和 num2,並返回兩者中較大的那個:
// function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
函式宣告
函式 **宣告** 會告訴編譯器函式的名稱以及如何呼叫函式。函式的實際主體可以單獨定義。
函式宣告具有以下部分:
return_type function_name( parameter list );
對於上面定義的函式 max(),以下是函式宣告:
int max(int num1, int num2);
引數名稱在函式宣告中並不重要,只需要它們的型別,因此以下宣告也有效:
int max(int, int);
當您在一個原始檔中定義函式並在另一個檔案中呼叫該函式時,需要函式宣告。在這種情況下,您應該在呼叫函式的檔案頂部宣告該函式。
呼叫函式
在建立 C++ 函式時,您會給出函式必須執行的操作的定義。要使用函式,您必須呼叫或呼叫該函式。
當程式呼叫函式時,程式控制權將轉移到被呼叫函式。被呼叫函式執行定義的任務,當執行其 return 語句或到達其函式結束的閉合大括號時,它會將程式控制權返回給主程式。
要呼叫函式,您只需傳遞所需的引數以及函式名稱,如果函式返回值,則可以儲存返回值。例如:
#include <iostream> using namespace std; // function declaration int max(int num1, int num2); int main () { // local variable declaration: int a = 100; int b = 200; int ret; // calling a function to get max value. ret = max(a, b); cout << "Max value is : " << ret << endl; return 0; } // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
我將 max() 函式與 main() 函式一起保留並編譯了原始碼。在執行最終的可執行檔案時,它將產生以下結果:
Max value is : 200
函式引數
如果函式要使用引數,則必須宣告變數來接受引數的值。這些變數稱為函式的 **形式引數**。
形式引數在函式內部的行為類似於其他區域性變數,並在進入函式時建立,並在退出時銷燬。
在呼叫函式時,引數傳遞給函式的方式有兩種:
序號 | 呼叫型別和描述 |
---|---|
1 | 按值呼叫
此方法將引數的實際值複製到函式的形式引數中。在這種情況下,對函式內部引數所做的更改不會影響引數。 |
2 | 按指標呼叫
此方法將引數的地址複製到形式引數中。在函式內部,該地址用於訪問呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數。 |
3 | 按引用呼叫
此方法將引數的引用複製到形式引數中。在函式內部,該引用用於訪問呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數。 |
預設情況下,C++ 使用 **按值呼叫** 來傳遞引數。通常,這意味著函式內的程式碼無法更改用於呼叫函式的引數,並且上述示例在呼叫 max() 函式時使用了相同的方法。
引數的預設值
在定義函式時,可以為每個最後一個引數指定一個預設值。如果在呼叫函式時省略了相應的引數,則將使用此值。
這是透過使用賦值運算子並在函式定義中為引數賦值來完成的。如果在呼叫函式時未傳遞該引數的值,則使用給定的預設值,但如果指定了值,則忽略此預設值,而使用傳遞的值。考慮以下示例:
#include <iostream> using namespace std; int sum(int a, int b = 20) { int result; result = a + b; return (result); } int main () { // local variable declaration: int a = 100; int b = 200; int result; // calling a function to add the values. result = sum(a, b); cout << "Total value is :" << result << endl; // calling a function again as follows. result = sum(a); cout << "Total value is :" << result << endl; return 0; }
編譯並執行上述程式碼時,會產生以下結果:
Total value is :300 Total value is :120