C++中的函式過載



C++中的函式過載允許您定義多個具有相同名稱但引數不同的函式。函式過載用於實現多型性,這是面向物件程式設計系統的一個重要概念。

過載函式的語法

考慮以下兩個具有相同名稱但引數不同的函式宣告:

return_type function_name(parameter1);
return_type function_name(parameter2);

函式過載示例

在以下示例中,我們定義了三個具有相同名稱但引數不同的函式。此示例演示了函式過載的實現:

#include<iostream>
using namespace std;

// Adding two integers (Function definition 1)
int addition(int a, int b) {
   return a + b;
}

// Adding three integers (Function definition 2)
int addition(int a, int b, int c) {
   return a + b + c;
}

// Adding two floating-point numbers (Function definition 3)
float addition(float a, float b) {
   return a + b;
}

int main() {
   cout<<addition(10.5f, 20.3f)<<endl;
   cout<<addition(10, 20, 30)<<endl;
   cout<<addition(10, 20)<<endl;

   return 0;
}

輸出

30.8
60
30

函式過載是如何工作的?

對於具有相同名稱的不同函式(函式過載),當編譯器到達特定函式呼叫時,它會根據引數型別、順序或引數數量檢查不同的函式定義,並執行匹配的函式定義。

示例

假設有3個不同的函式定義來使用不同引數新增數字:

// Adding two integers (Function definition 1)
int addition(int a, int b) {
   return a + b;
}

// Adding three integers (Function definition 2)
int addition(int a, int b, int c) {
   return a + b + c;
}

// Adding two floating-point numbers (Function definition 3)
float addition(float a, float b) {
   return a + b;
}

並且,您按以下順序呼叫函式:

addition(10.5f, 20.3f); // Function call 1
addition(10, 20, 30); // Function call 2
addition(10, 20); // Function call 3

在上述函式呼叫中,函式定義將按以下順序呼叫:

  • 函式呼叫1將執行函式定義3,因為這裡我們傳遞了兩個浮點值。
  • 函式呼叫2將執行函式定義2,因為這裡我們傳遞了三個整數值。
  • 函式呼叫3將執行函式定義1,因為這裡我們傳遞了兩個整數值。

基於引數數量的函式過載

此方法涉及定義多個具有相同名稱但引數數量不同的函式。

語法

void display(int a);  // takes one parameter
void display(int a, double b);  // takes two parameters

示例

以下示例演示了基於引數數量的函式過載:

#include <iostream>
using namespace std;

// Function overloads based on the number of parameters
void display(int a) {
   cout << "Display with one integer: " << a << endl;
}
void display(int a, double b) {
   cout << "Display with an integer and a double: " << a << " and " << b << endl;
}
int main() {
   // Calls the first overload
   display(10);     

   // Calls the second overload
   display(10, 3.14); 
   double: 10 and 3.14
   return 0;
}

輸出

Display with one integer: 10
Display with an integer and a double: 10 and 3.14

基於不同引數型別的函式過載

此方法涉及定義多個具有相同名稱但引數型別不同的函式。

語法

void show(int a);  // parameter with int type 
void show(double a);  // parameter with double type

示例

以下示例演示了基於不同引數型別的函式過載:

#include <iostream>
using namespace std;

// Function for integer input
void show(int a) {
   cout << "Integer value: " << a << std::endl;
}
// Function for double input
void show(double a) {
   cout << "Double value: " << a << std::endl;
}
int main() {
   show(10);  
   show(3.14);      
   return 0;
}

輸出

Integer value: 10
Double value: 3.14

基於不同引數順序的函式過載

此方法涉及定義多個具有相同名稱但引數順序不同的函式。

語法

// integer followed by a double, 
// can be any datatype(bool, char etc)
void display(int a, double b) { 
   cout << "Integer and Double: " << a << ", " << b << endl;
}

// double followed by an integer
void display(double a, int b) {  
   cout << "Double and Integer: " << a << ", " << b << endl;
}

示例

以下示例演示了基於不同引數順序的函式過載:

#include <iostream>
using namespace std;
void display(int a, double b) {
   cout << "Integer and Double: " << a << ", " << b << endl;
}

void display(double a, int b) {
   cout << "Double and Integer: " << a << ", " << b <<endl;
}
int main() {
   display(10, 3.14);
   display(3.14, 10);
   return 0;
}

輸出

Integer and Double: 10, 3.14
Double and Integer: 3.14, 10

函式過載的用例

C++中的函式過載是一個強大的功能,它允許您使用相同的函式名稱根據不同的引數列表執行不同的任務。這可以使程式碼更易讀和易於維護。以下是函式過載有用的常見場景和示例:

  • 不同資料型別 - 函式過載對於使用通用函式名稱處理各種資料型別很有用。
  • 不同數量的引數 - 函式過載為具有不同數量引數的函式提供了靈活性。
  • 引數型別和順序 - 函式過載處理不同的引數型別或它們的順序。
  • 不同的操作 - 函式過載支援針對不同資料型別或上下文的類似操作。
  • 變體上下文 - 函式過載提供函式的變體以滿足不同的需求或詳細程度。
廣告