首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 函數重載詳解:規則、機制與實戰範例

     編輯:關於C++

什麼是函數重載?

在 C++ 中,若在同一作用域內宣告多個同名函數,但其參數列表(參數個數、類型或順序)不同,這稱為函數重載。重載讓我們能用同一函數名稱處理不同類型或數量的資料,提升程式碼的可讀性與復用性。

重載的核心規則

  • 必須差異:參數個數、類型、順序至少有一項不同。
  • 返回類型不參與區分:若僅返回類型不同而參數相同,編譯器會報錯(語法錯誤)。
  • 靜態綁定:重載屬於靜態多態,編譯期根據實參類型、個數、順序決定呼叫哪個函數,執行效率高。

合法與非法重載對比

✅ 合法範例

int abs(int i);
long abs(long l);
double abs(double d);

參數類型不同,構成合法重載。

❌ 非法範例

int abs(int i);
long abs(int i);      // 僅返回類型不同 → 錯誤
void abs(int i);      // 同上

重載形式總覽

形式說明
參數個數不同如 fun(int) vs fun(int, int)
參數類型不同如 fun(int) vs fun(double)
參數順序不同如 fun(int, double) vs fun(double, int)
個數與類型皆不同綜合上述情況

編譯器如何選擇重載函數?

呼叫時,編譯器依照實際參數的個數、類型、順序進行最佳匹配。若找到唯一最佳匹配則呼叫該函數;若有多個同等匹配則報「呼叫不明確」錯誤;若無匹配則報「找不到符合的函數」。

完整程式範例

#include <iostream>
using namespace std;

void fun(int a, int b) {
    cout << "int fun" << endl;
}

void fun(double a, double b) {
    cout << "double fun" << endl;
}

int main() {
    fun(10, 20);       // 呼叫 int 版本
    fun(3.14, 2.71);   // 呼叫 double 版本
    return 0;
}

重載執行結果示意圖

重載的最佳實踐建議

  1. 語意相關的操作才重載,避免濫用導致混淆。
  2. 預設參數與重載結合時需小心,避免產生歧義。
  3. 配合 const 修飾符區分 const 與非 const 版本(如容器的 operator[])。

掌握函數重載,能讓你設計出更直觀、更符合直覺的 C++ 介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved