最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++初階函數(shù)重載詳細講解

 更新時間:2026年05月25日 09:33:44   作者:霍霍的袁  
在C++中,函數(shù)重載允許同一作用域內(nèi)存在多個同名函數(shù),條件包括參數(shù)個數(shù)、類型或順序不同,避免重載與缺省參數(shù)導致的調(diào)用歧義,確保代碼清晰高效,本文介紹C++初階函數(shù)重載詳細講解,感興趣的朋友一起看看吧

前言

在 C 語言中,同一個作用域內(nèi)不能定義同名函數(shù),一旦重復定義就編譯報錯。
而 C++ 引入了函數(shù)重載特性,允許同一作用域下存在多個同名函數(shù),只要參數(shù)列表有差異即可。

一、什么是函數(shù)重載

官方定義:
同一個作用域中,存在多個函數(shù)名相同,但參數(shù)列表不同的一組函數(shù),稱之為函數(shù)重載。

二、構(gòu)成函數(shù)重載的 3 種合法條件

只要滿足任意一種,即可構(gòu)成重載:

  1. 參數(shù)個數(shù)不同
  2. 參數(shù)類型不同
  3. 參數(shù)類型的順序不同

注意:和返回值參數(shù)變量名無關(guān)。

1. 參數(shù)個數(shù)不同

#include<iostream>
using namespace std;
// 無參
void f()
{
    cout << "f()" << endl;
}
// 1個參
void f(int a)
{
    cout << "f(int a)" << endl;
}
int main()
{
    f();    // 調(diào)用無參版本,即輸出:f()
    f(10);  // 調(diào)用有參版本,即輸出:f(int a)
    return 0;
}

2. 參數(shù)類型不同

#include<iostream>
using namespace std;
int Add(int left, int right)
{
    cout << "int 版本" << endl;
    return left + right;
}
double Add(double left, double right)
{
    cout << "double 版本" << endl;
    return left + right;
}
int main()
{
    Add(10, 20);        // 匹配int版本
    Add(10.5, 20.5);    // 匹配double版本
    return 0;
}

3. 參數(shù)類型順序不同

參數(shù)個數(shù)相同、類型相同,僅順序調(diào)換,也可以構(gòu)成重載:

#include<iostream>
using namespace std;
void f(int a, char b)
{
    cout << "f(int, char)" << endl;
}
void f(char b, int a)
{
    cout << "f(char, int)" << endl;
}
int main()
{
    f(10, 'a');	// 輸出:f(int, char)
    f('a', 10);	// 輸出:f(char, int)
    return 0;
}

三、絕對不能構(gòu)成重載的 2 種情況

1. 僅返回值不同,不能構(gòu)成重載

// 錯誤!僅返回值不同,不構(gòu)成重載
void fxx()
{}
int fxx()
{
    return 1;
}

原因:
函數(shù)調(diào)用時,編譯器只看參數(shù),不看返回值;
調(diào)用 fxx(); 編譯器無法區(qū)分該調(diào)用哪個版本,直接編譯報錯

2. 僅參數(shù)名字不同,不能構(gòu)成重載

void fun(int a)
{}
void fun(int b)  // 不算重載!參數(shù)名不參與重載判定
{}

四、函數(shù)重載 + 缺省參數(shù) = 歧義陷阱(易錯點)

重載和缺省參數(shù)混用,極易產(chǎn)生調(diào)用歧義,編譯報錯。
舉個例子:

#include<iostream>
using namespace std;
// 重載版本1:無參
void f1()
{
    cout << "f()" << endl;
}
// 重載版本2:帶缺省參數(shù)
void f1(int a = 10)
{
    cout << "f(int a)" << endl;
}
int main()
{
    f();   // 編譯報錯!歧義
    return 0;
}

報錯原因:
調(diào)用 f1() 不傳參時:

  • 可以調(diào)用無參 f1()
  • 也可以調(diào)用帶缺省的 f1(int a = 10)

編譯器不知道選哪個,產(chǎn)生二義性,直接編譯失敗。
因此:寫重載函數(shù)時,盡量不要給參數(shù)設置缺省值。

總結(jié)

到此這篇關(guān)于C++初階函數(shù)重載詳細講解的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

新晃| 静海县| 上虞市| 措勤县| 神农架林区| 敦煌市| 蓝田县| 七台河市| 光山县| 讷河市| 浦北县| 沾益县| 通江县| 平潭县| 江阴市| 赫章县| 石嘴山市| 阿拉善左旗| 浦东新区| 赤峰市| 共和县| 盈江县| 西安市| 珠海市| 杨浦区| 武陟县| 宁陕县| 郎溪县| 霍邱县| 竹山县| 宁陕县| 尖扎县| 西盟| 界首市| 泰兴市| 河源市| 乳源| 忻城县| 崇信县| 永胜县| 双牌县|