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
廣告