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

C++ 函數重載詳解:規則、示例與多態應用

     編輯:C++ 入門

什麼是函數重載

函數重載允許同一作用域內定義多個同名函數,只要參數列表不同(參數個數、類型或順序)。編譯器根據實參類型與個數,在編譯期靜態綁定到對應實現,實現靜態多態。

注意:若需兼容 C 語言鏈接(如 extern "C"),則不能重載,因 C 無名稱修飾機制。

重載決議規則

編譯器按以下優先級匹配:

  1. 精確匹配(含類型轉換為 const、引用綁定)
  2. 標準轉換(算術轉換、指針轉換等)
  3. 用戶定義轉換(構造函數、轉換運算符)
  4. 省略號 ... 匹配

若存在多個同等最佳匹配,報二義性錯誤。

參數類型不同的重載示例


#include <iostream>
using namespace std;

int add(int x, int y) { return x + y; }
double add(double a, double b) { return a + b; }

int main() {
    cout << add(3, 5) << endl;       // 調用 int 版本,輸出 8
    cout << add(2.5, 3.7) << endl;   // 調用 double 版本,輸出 6.2
    return 0;
}

參數個數不同的重載示例


#include <iostream>
using namespace std;

int min(int a, int b) { return a < b ? a : b; }
int min(int a, int b, int c) { return min(min(a, b), c); }
int min(int a, int b, int c, int d) { return min(min(a, b), min(c, d)); }

int main() {
    cout << min(5, 3) << endl;           // 3
    cout << min(5, 3, 8) << endl;        // 3
    cout << min(5, 3, 8, 1) << endl;     // 1
    return 0;
}

常見誤區與限制

  • 返回類型不能區分重載:int foo(); double foo(); 錯誤。
  • 默認參數可能導致二義性:void f(int a, int b=10); void f(int a); 調用 f(5) 時編譯器無法決定。
  • 作用域遮蔽:派生類中同名函數會隱藏基類所有同名重載,需用 using Base::func; 引入。

重載在類設計中的應用

構造函數重載是最典型場景,提供多種初始化方式。運算符重載(如 operator+、operator<<)亦屬重載範疇,極大提升類的易用性。結合虛函數可實現動態多態,構成 C++ 面向對象核心機制。

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