欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一.缺省參數(shù)

1.1缺省參數(shù)概念

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

簡而言之就是應(yīng)對沒有傳實參時的一種保底手段,若沒有傳實參缺省參數(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ù)

顧名思義,對所有形參進行初始化

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ù)

對一部分形參進行初始化

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;
}

注意事項:

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

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

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

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

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

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

}

這樣編譯器無法確定該用哪個值

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

二.函數(shù)重載

2.1函數(shù)重載概念

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

//參數(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ù)個數(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;
}

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • C語言實例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    C語言實例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護一組數(shù)據(jù)集合時,就可以使用鏈表,這一點和數(shù)組很相似
    2022-04-04
  • C語言實現(xiàn)簡易的掃雷游戲

    C語言實現(xiàn)簡易的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言算法練習(xí)之求二維數(shù)組最值問題

    C語言算法練習(xí)之求二維數(shù)組最值問題

    這篇文章主要為大家介紹了C語言算法練習(xí)中求二維數(shù)組最值的實現(xiàn)方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-09-09
  • C++?STL容器詳解之紅黑樹部分模擬實現(xiàn)

    C++?STL容器詳解之紅黑樹部分模擬實現(xiàn)

    本文主要對紅黑樹進行了詳細(xì)介紹,并對其核心功能進行了模擬實現(xiàn)。文中的代碼對我們的學(xué)習(xí)或工作有一定的價值,感興趣的小伙伴可以了解一下
    2021-12-12
  • 在QT5中實現(xiàn)求兩個輸入值的和并輸出(實例)

    在QT5中實現(xiàn)求兩個輸入值的和并輸出(實例)

    下面小編就為大家?guī)硪黄赒T5中實現(xiàn)求兩個輸入值的和并輸出(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • C語言實現(xiàn)Fibonacci數(shù)列遞歸

    C語言實現(xiàn)Fibonacci數(shù)列遞歸

    這篇文章主要介紹了C語言實現(xiàn)Fibonacci數(shù)列遞歸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++?OpenCV技術(shù)實戰(zhàn)之身份證離線識別

    C++?OpenCV技術(shù)實戰(zhàn)之身份證離線識別

    OpenCV身份證離線識別技術(shù)的主要技術(shù)就是通過OpenCV找到身份證號碼區(qū)域,然后通過OCR進行數(shù)字識別該區(qū)域的截圖即可得到身份證號碼。感興趣的可以了解一下
    2021-12-12
  • C++實現(xiàn)簡單的ls命令及其原理

    C++實現(xiàn)簡單的ls命令及其原理

    這篇文章主要介紹了C++實現(xiàn)簡單的ls命令及其原理,C++實現(xiàn)ls命令可通過調(diào)用系統(tǒng)函數(shù)實現(xiàn)讀取目錄中的文件名和屬性,再通過標(biāo)準(zhǔn)輸出進行顯示,需要的朋友可以參考下
    2023-05-05
  • C++繼承和動態(tài)內(nèi)存分配

    C++繼承和動態(tài)內(nèi)存分配

    這篇文章主要介紹了C++繼承和動態(tài)內(nèi)存分配,當(dāng)我們的基類使用動態(tài)內(nèi)存分配,并且重新定義賦值和復(fù)制構(gòu)造函數(shù),這會對派生類的實現(xiàn)有什么影響呢?我們帶罩疑問倆姐下面文章內(nèi)容吧
    2022-01-01
  • C++中的函數(shù)返回值與拷貝用法

    C++中的函數(shù)返回值與拷貝用法

    這篇文章主要介紹了C++中的函數(shù)返回值與拷貝用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論