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

C++缺省參數(shù)與重載函數(shù)(超詳細(xì)!)

 更新時(shí)間:2024年06月13日 09:42:21   作者:瑪麗亞后  
無(wú)論使用什么語(yǔ)言函數(shù)都是代碼段中必不可少的部分,因此我們有必要深入認(rèn)識(shí)一下C++中函數(shù)的兩種特殊用法,缺省參數(shù),函數(shù)重載,這篇文章主要給大家介紹了關(guān)于C++缺省參數(shù)與重載函數(shù)的相關(guān)資料,需要的朋友可以參考下

本篇文章主要講述c++中有關(guān)于缺少參數(shù)與函數(shù)重載的相關(guān)概念與實(shí)例,以下是本人拙見,如有錯(cuò)誤敬請(qǐng)指教。

一.缺省參數(shù)

1.1缺省參數(shù)概念

缺省參數(shù)就是聲明和定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)缺省值

簡(jiǎn)而言之就是應(yīng)對(duì)沒有傳實(shí)參時(shí)的一種保底手段,若沒有傳實(shí)參缺省參數(shù)就會(huì)用自己的初始化數(shù)值,傳實(shí)參則用實(shí)參的值忽略缺省值。

#include <iostream>
using namespace std;
void fun(int a = 0)
{
	cout << a << endl;
}

int main()
{
	int a = 1;
	fun();
	fun(a);
	return 0;
}

1.2缺省參數(shù)分類

  • 全缺省參數(shù)

顧名思義,對(duì)所有形參進(jìn)行初始化

void fun(int a = 0,int b = 0,int c= 0)
{
	cout << a << b << c << endl;
}
int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	fun();
	fun(a, b, c);
	return 0;
}

  • 半缺省參數(shù)

對(duì)一部分形參進(jìn)行初始化

void fun(int a, int b = 0, int c = 0)
{
	cout << a << b << c << endl;
}
int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	fun(a,b);
	fun(a, b, c);
	return 0;
}

注意事項(xiàng):

  •  半缺省參數(shù)必須從右往左依次給出,不能間隔著給

如果是從左往右給出,那么會(huì)出現(xiàn)以下兩種情況:

為了確保形參C能夠接受到數(shù)值必須占用一個(gè)實(shí)參,那么1的指向反而亂套了無(wú)論是給a還是b都可以。

而從右往左就不會(huì)出現(xiàn)這種情況。這里就像是五線譜,實(shí)參與形參的位置順序都是一一對(duì)應(yīng)的。

  • 缺省參數(shù)不能在聲明和定義中同時(shí)出現(xiàn) (只能在聲明中用)
//a.h
void fun(int a = 1);

//a.cpp
void fun(int a = 2)
{

}

這樣編譯器無(wú)法確定該用哪個(gè)值

  • 缺省值必須是全局變量或常量
  • C語(yǔ)言不支持

二.函數(shù)重載

2.1函數(shù)重載概念

即在同一作用域下——功能類似的同名函數(shù)(參數(shù)個(gè)數(shù)、類型、類型順序不同),通俗點(diǎn)就是一詞多義。

//參數(shù)類型不同
int fun1(int a, int b)
{
	cout << "fun1(int a,int b)" << endl;
	return a + b;
}

double fun1(double a, double b)
{
	cout << "fun1(double a,double b)" << endl;
	return a + b;
}

//參數(shù)個(gè)數(shù)不同
void fun2()
{
	cout << "fun2()" << endl;
}

void fun2(int a)
{
	cout << "fun2(int a)" << endl;
}

//類型順序不同
void fun3(int a, char b)
{
	cout << "fun3(int a,char b)" << endl;
}

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


int main()
{
	fun1(10,20);
	fun1(10.1, 20.2);

	fun2();
	fun2(10);

	fun3(10, 'a');
	fun3('a',10);

	return 0;
}

上述例子可以看到在有多個(gè)同名函數(shù)的情況下,編譯器會(huì)根據(jù)參數(shù)個(gè)數(shù)、類型、類型順序 進(jìn)行相應(yīng)的匹配。

不過當(dāng)我們所用的實(shí)參對(duì)應(yīng)不到相關(guān)的同名函數(shù)時(shí)就會(huì)報(bào)錯(cuò)。

確實(shí)是可以隱式轉(zhuǎn)換,問題是int轉(zhuǎn)double還是double轉(zhuǎn)int呢?所以有時(shí)候存在多個(gè)重載函數(shù)時(shí)反而會(huì)有歧義。這時(shí)候只要去掉其中一個(gè)重載就可以隱式轉(zhuǎn)換了。

我們?cè)俳Y(jié)合缺省參數(shù)時(shí)不傳實(shí)參的重載函數(shù)也會(huì)發(fā)生歧義,編譯器也不知道要調(diào)用哪個(gè)重載函數(shù)了,這種情況也需要注意。 

函數(shù)重載有利有弊吧,方便的同時(shí)也是要付出一些代價(jià)的~

2.2c++支持函數(shù)重載原理——命名修飾

在c/c++中一個(gè)程序要運(yùn)行起來(lái),需要經(jīng)歷以下階段:預(yù)處理——編譯——匯編——鏈接

  • 預(yù)處理:生成Fun.i與Test.i文件,其中前者包含聲明與定義,而后者只有Fun.h聲明沒有定義。
  • 編譯:生成Fun.s與Test.s文件,其中由main函數(shù)進(jìn)行調(diào)用相關(guān)函數(shù),但由于Test.i中的main函數(shù)只包含聲明并沒有定義,這意味著call不到地址,在這種情況下編譯器只能先對(duì)照聲明是否匹配,就算聲明匹配成功這也只能算是個(gè)承諾先放你到下一階段,最后還是要查地址的。
  • 匯編:生成Fun.o與Test.o文件
  • 鏈接:合并到一起并解決無(wú)法確定函數(shù)地址的問題,由于c語(yǔ)言在該階段會(huì)生成一個(gè)符號(hào)表,可以在此去尋找函數(shù)名字與地址進(jìn)一步驗(yàn)證之前的承諾。但c++不同,它不會(huì)生成符號(hào)表,而是有一套獨(dú)特的命名規(guī)則。

歸根結(jié)底就是在編譯的時(shí)候c與c++都一樣會(huì)有無(wú)法直接找到地址的問題,只不過最后在鏈接的時(shí)候雙方的處理方式不同,c語(yǔ)言靠符號(hào)表,而c++靠獨(dú)特的函數(shù)命名修飾原則。

這是在linux環(huán)境下由gcc編譯完成的命名修飾樣例。

當(dāng)然我們不用這么去細(xì)究這些,只需要知道函數(shù)重載中是c++特有的即可。

總結(jié)

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

相關(guān)文章

  • Linux下C語(yǔ)言實(shí)現(xiàn)C/S模式編程

    Linux下C語(yǔ)言實(shí)現(xiàn)C/S模式編程

    這篇文章主要為大家詳細(xì)介紹了Linux下C語(yǔ)言實(shí)現(xiàn)C/S模式編程的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • C++11中alignof和alignas的入門

    C++11中alignof和alignas的入門

    C++11引入alignof和alignas,用于控制內(nèi)存對(duì)齊,alignof查詢類型對(duì)齊要求,alignas指定最小對(duì)齊值,幫助優(yōu)化性能、實(shí)現(xiàn)跨平臺(tái)兼容,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06
  • 一文詳解如何實(shí)現(xiàn)QT的多語(yǔ)言切換(靜態(tài)+動(dòng)態(tài))

    一文詳解如何實(shí)現(xiàn)QT的多語(yǔ)言切換(靜態(tài)+動(dòng)態(tài))

    這篇文章主要給大家介紹了關(guān)于如何實(shí)現(xiàn)QT的多語(yǔ)言切換(靜態(tài)+動(dòng)態(tài))的相關(guān)資料,Qt是一款跨平臺(tái)的C++應(yīng)用程序開發(fā)框架,提供了一套豐富的工具和類庫(kù)來(lái)簡(jiǎn)化應(yīng)用程序開發(fā),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • C語(yǔ)言中`||`的短路機(jī)制詳解

    C語(yǔ)言中`||`的短路機(jī)制詳解

    在C語(yǔ)言中,邏輯或運(yùn)算符(||)是一種常用的邏輯運(yùn)算符,用于組合多個(gè)條件表達(dá)式,C語(yǔ)言中的邏輯或運(yùn)算符具有短路機(jī)制,這是一種非常重要的概念,本文將深入解釋C語(yǔ)言中的||短路機(jī)制以及其在編程中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Dev C++編譯時(shí)運(yùn)行報(bào)錯(cuò)source file not compile問題

    Dev C++編譯時(shí)運(yùn)行報(bào)錯(cuò)source file not compile問題

    這篇文章主要介紹了Dev C++編譯時(shí)運(yùn)行報(bào)錯(cuò)source file not compile問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 源碼分析C++是如何實(shí)現(xiàn)string的

    源碼分析C++是如何實(shí)現(xiàn)string的

    我們平時(shí)使用C++開發(fā)過程中或多或少都會(huì)使用std::string,但您了解string具體是如何實(shí)現(xiàn)的嗎,本文小編就帶大家從源碼角度分析一下
    2023-04-04
  • 如何基于C++解決RTSP取流報(bào)錯(cuò)問題

    如何基于C++解決RTSP取流報(bào)錯(cuò)問題

    這篇文章主要介紹了如何基于C++解決RTSP取流報(bào)錯(cuò)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解

    C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解

    這篇文章主要介紹了C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解的相關(guān)資料,希望通過本文大家能夠掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于C++ string和c類型字符數(shù)組的對(duì)比

    關(guān)于C++ string和c類型字符數(shù)組的對(duì)比

    下面小編就為大家?guī)?lái)一篇關(guān)于C++ string和c類型字符數(shù)組的對(duì)比。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-07-07
  • C++二叉搜索樹BSTree使用詳解

    C++二叉搜索樹BSTree使用詳解

    二叉搜索樹(Binary Search Tree)又稱二叉排序樹,也稱作二叉查找樹它或者是一棵空樹,或者是具有以下性質(zhì)的二叉樹,若它的左子樹不為空,則左子樹上所有節(jié)點(diǎn)的值都小于根節(jié)點(diǎn)的值,若它的右子樹不為空,則右子樹上所有節(jié)點(diǎn)的值都大于根節(jié)點(diǎn)的值
    2023-03-03

最新評(píng)論

门源| 邛崃市| 永寿县| 大兴区| 凤台县| 六枝特区| 平利县| 赫章县| 大城县| 中牟县| 浮梁县| 洞口县| 石门县| 孟州市| 牙克石市| 封丘县| 平远县| 枣阳市| 花垣县| 孟津县| 巩义市| 广南县| 花莲市| 南汇区| 牙克石市| 高州市| 高密市| 巩义市| 红桥区| 囊谦县| 沙河市| 怀远县| 永定县| 杭州市| 邯郸县| 佛冈县| 盘山县| 永川市| 蓬溪县| 丰宁| 林周县|