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

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

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

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

一.缺省參數(shù)

1.1缺省參數(shù)概念

缺省參數(shù)就是聲明和定義函數(shù)時為函數(shù)的參數(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ù)

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

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)這種情況。這里就像是五線譜,實參與形參的位置順序都是一一對應的。

  • 缺省參數(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ù)、類型、類型順序 進行相應的匹配。

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

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

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

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

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

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

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

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

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

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

總結

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

相關文章

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

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

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

    C++11中alignof和alignas的入門

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

    一文詳解如何實現(xiàn)QT的多語言切換(靜態(tài)+動態(tài))

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

    C語言中`||`的短路機制詳解

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

    Dev C++編譯時運行報錯source file not compile問題

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

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

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

    如何基于C++解決RTSP取流報錯問題

    這篇文章主要介紹了如何基于C++解決RTSP取流報錯問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • C++類型轉換運算符的實例詳解

    C++類型轉換運算符的實例詳解

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

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

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

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

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

最新評論

徐汇区| 淮阳县| 广东省| 榆社县| 夏邑县| 长海县| 灌阳县| 凌源市| 信宜市| 郸城县| 灌南县| 达拉特旗| 历史| 扶沟县| 城固县| 连山| 平山县| 铜山县| 航空| 昌图县| 赣榆县| 文登市| 腾冲县| 海口市| 唐河县| 洪泽县| 米脂县| 易门县| 武安市| 依兰县| 乐业县| 信阳市| 巨鹿县| 鹤峰县| 凭祥市| 泸溪县| 延安市| 甘泉县| 周宁县| 漳州市| 宁安市|