国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【初識C++】(缺省參數(shù)和函數(shù)重載)

這篇具有很好參考價值的文章主要介紹了【初識C++】(缺省參數(shù)和函數(shù)重載)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、缺省參數(shù)

1.缺省參數(shù)定義

缺省參數(shù)是在函數(shù)的聲明中給定參數(shù)一個指定的值。
如果傳參沒有給定參數(shù),那就按照聲明中默認的缺省值,如果給定了參數(shù),那就按照給定的參數(shù)值。
比如:

using namespace std;

void Func(int a = 0)
{
	cout << a << endl;
}

int main()
{
	Func();		 // 沒有傳參時,使用參數(shù)的默認值

	Func(10);	 // 傳參時,使用指定的實參

	return 0;
}

對于Func函數(shù)如果沒有給定參數(shù),那就按照默認的缺省值來賦值。如果給定了參數(shù),那就按照給定的參數(shù)進行賦值。

2.缺省參數(shù)分類

2.1全缺省參數(shù)

全缺省參數(shù)是所有的參數(shù)都給定缺省值。

void Func(int a = 10, int b = 20, int c = 30)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}

比如上面的函數(shù)參數(shù)就是全缺省參數(shù)。

2.2半缺省參數(shù)

半缺省參數(shù)是給定部分缺省值,不一定是給定一半。

void Func(int a, int b = 10, int c = 20)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}

注意:1.給定半缺省參數(shù)必須從右往左給?。?!
注意:1.給定半缺省參數(shù)必須從右往左給?。?!
注意:1.給定半缺省參數(shù)必須從右往左給!??!

比如:

void Func(int a =10, int b = 10, int c)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}

這樣是錯誤的

也不能間隔著給,比如:

void Func(int a = 10 , int b, int c = 20)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}

這樣也是錯誤的。

注意:2.也不能在聲明和定義中同時給定缺省值??!
注意:2.也不能在聲明和定義中同時給定缺省值??!
注意:2.也不能在聲明和定義中同時給定缺省值??!

二、函數(shù)重載

1.函數(shù)重載概念

函數(shù)重載是在同一作用域中具有幾個功能相同且同名的函數(shù),這些函數(shù)中具有不同的參數(shù)(包括參數(shù)類型,參數(shù)數(shù)量,參數(shù)位置)。

2.構成重載的幾種方式

2.1由于函數(shù)參數(shù)類型不同構成重載。

// 參數(shù)類型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}

double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

這兩個函數(shù)構成重載,因為兩個函數(shù)同名,且它們的參數(shù)類型不同,上面的Add函數(shù)參數(shù)都是int類型,下面的Add函數(shù)參數(shù)是double類型。

2.2 參數(shù)個數(shù)不同構成重載

void fun()
{
	cout << "fun()" << endl;
}

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

這兩個函數(shù)構成重載,因為函數(shù)名相同,并且第一個fun函數(shù)參數(shù)個數(shù)為0,第二個fun函數(shù)參數(shù)個數(shù)為int a,為1個。

2.3函數(shù)參數(shù)類型順序不同

// 3、參數(shù)類型順序不同
void fun(int a, char b)
{
	cout << "fun(int a,char b)" << endl;
}

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

這兩個函數(shù)構成重載,因為函數(shù)名相同,并且第一個fun函數(shù)的參數(shù)類型分別為 int ,char,但是第二個fun函數(shù)的參數(shù)類型分別為char,int。

注意:下面的兩個函數(shù)不構成重載!

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

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

變量名與函數(shù)是否重載無關!

注意:
1.必須是相同的函數(shù)名
2.返回值不作為函數(shù)重載的條件。也就是返回值與函數(shù)是否重載無關。

比如:


int fun(int a)
{
	cout << "fun(int a)" << endl;
	return a+b;
}

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

int main()
{
	fun(1)
	fun(2)
}

假如要調(diào)用函數(shù)時,編譯器就不知道該找哪個了。

為什么會有函數(shù)重載及其原理

對于C語言來說,是不支持函數(shù)重載的,C語言不允許出現(xiàn)兩個同名的函數(shù)。

為了彌補這一缺陷,C++設計成可以使用同名函數(shù)來解決C語言的缺陷。

函數(shù)重載的原理:

我們知道.c文件生成.exe文件會分成幾步:
1、 .c文件經(jīng)過預處理器進行預處理生成 .i文件。

2、.i文件再經(jīng)過編譯器進行編譯后,生成.s文件,該階段會進行一些語法分析,詞法分析,語義分析,符號匯總等操作。

3、.s文件再經(jīng)過匯編器進行匯編操作后生成.o文件,該階段會將代碼翻譯成匯編指令,再翻譯成機器碼。
在匯編階段,會生成一張符號表,這張符號存儲著被初始化了的全局變量,未被初始化的全局變量,變量名,變量的字節(jié)偏移量,函數(shù)名,還有地址等。

4、鏈接階段,.o文件經(jīng)過鏈接器的鏈接后,會生成.exe可執(zhí)行程序。在這個階段,鏈接器會將不同的.o文件的符號表等數(shù)據(jù)進行合并和重定位等。

**所以:函數(shù)名的地址是在匯編完成后生成的。**所以對于不同的函數(shù)名。比如:
【初識C++】(缺省參數(shù)和函數(shù)重載)

在main.c文件對sum這個函數(shù)進行了聲明,但是聲明不會獲得該函數(shù)的地址,而在sum.c文件中,經(jīng)過了鏈接器的連接之后,將sum.o和main.o文件進行了符號表的合并,獲取到了sum這個函數(shù)的地址,從而對該函數(shù)進行調(diào)用。

C++編譯器中,對于同名的函數(shù),在編譯階段,C++的編譯器會對這兩個同名的函數(shù)進行函數(shù)名修飾

不同的編譯器對函數(shù)名的修飾規(guī)則不同,以Linux的gcc(c語言編譯器)和g++(c++編譯器)兩個編譯器為例。

gcc編譯器對圖中的函數(shù)的編譯結果為右邊:

【初識C++】(缺省參數(shù)和函數(shù)重載)
g++編譯器對圖中的函數(shù)的編譯結果為右邊:
【初識C++】(缺省參數(shù)和函數(shù)重載)

可以明顯地看到,g++對函數(shù)做了修飾,編譯后不再是原來的函數(shù)名了。

g++修飾規(guī)則:【_Z+函數(shù)長度+函數(shù)名+類型首字母】

在linux下,采用g++編譯完成后,函數(shù)名字的修飾發(fā)生改變,編譯器將函數(shù)參
數(shù)類型信息添加到修改后的名字中。

通過這里就理解了C語言沒辦法支持重載,因為同名函數(shù)沒辦法區(qū)分。而C++是通過函數(shù)修飾規(guī)則來區(qū)分,只要參數(shù)不同,修飾出來的名字就不一樣,就支持了重載。文章來源地址http://www.zghlxwxcb.cn/news/detail-428848.html

到了這里,關于【初識C++】(缺省參數(shù)和函數(shù)重載)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【C++初階(二)】缺省參數(shù)&函數(shù)重載

    【C++初階(二)】缺省參數(shù)&函數(shù)重載

    目錄 前言 1. 缺省參數(shù) ?1.1 什么是缺省參數(shù) ?1.2 缺省參數(shù)的分類 ? ? ?1.2.1 全缺省參數(shù) ?1.2.2 半缺省參數(shù) 2. 函數(shù)重載 ?2.1 什么是函數(shù)重載 ?2.2 缺省參數(shù)與函數(shù)重載 ?2.3 函數(shù)重載的使用 ?3. C++支持函數(shù)重載的原因 ?總結 ? ? ? ? 在學習C語言時我們就會發(fā)現(xiàn),C語言中存在的

    2024年02月07日
    瀏覽(28)
  • 【C++初階】缺省參數(shù)與函數(shù)重載

    【C++初階】缺省參數(shù)與函數(shù)重載

    ? ? C++祖師爺在用C寫代碼的時候,就覺得有些地方用著很不方便,于是就在C++設計了缺省參數(shù),在實現(xiàn)一些功能時,用這個就方便了許多。 缺省參數(shù)是聲明或定義函數(shù)時為 函數(shù)的參數(shù)指定一個缺省值 。在調(diào)用該函數(shù)時: ? ? ? ? ? ? a.如果沒有指定實參則采用該形參的缺省

    2023年04月22日
    瀏覽(23)
  • 【C++初階】C++入門——缺省參數(shù)、函數(shù)重載

    【C++初階】C++入門——缺省參數(shù)、函數(shù)重載

    ?缺省參數(shù)是 聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值 。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。 ?上面代碼在 fun 函數(shù)的形參部分給了缺省值10,這意味著在調(diào)用 fun 函數(shù)的時候可以傳參,也可以不傳參,如果傳參了那形參

    2024年02月11日
    瀏覽(18)
  • 【開懂C++】命名空間 函數(shù)重載 缺省參數(shù)

    【開懂C++】命名空間 函數(shù)重載 缺省參數(shù)

    在編寫C語言代碼時,當工程較大時,很容易產(chǎn)生變量命名沖突的情況——一般有兩種沖突的情況 1.變量名與庫中的函數(shù)名、沖突 。 2.工程模塊化搭建時不同文件的命名沖突 。 而C++為了優(yōu)化這一缺陷,提出了命名空間的概念。 命名空間使用的是 namespace ,命名空

    2023年04月18日
    瀏覽(23)
  • C++中命名空間、缺省參數(shù)、函數(shù)重載

    C++中命名空間、缺省參數(shù)、函數(shù)重載

    目錄 1.命名空間 2.缺省參數(shù) 3.函數(shù)重載 在C++中定義命名空間我們需要用到namespace,后面跟上命名空間的名字,結構框架有點類似結構體(如圖所示) 上面的代碼我一一進行講解: 1.我們先來說第三行和main函數(shù)中的代碼意思,第三行代碼的意思是展開std庫的空間,std是

    2024年01月23日
    瀏覽(23)
  • 【C++】命名空間、缺省參數(shù)和函數(shù)重載

    在一個大型的項目中,不同成員寫的程序中會不可避免的帶來 命名沖突 的問題,這種情況下命名空間可以很好的解決這種命名沖突大的問題,它可以用來避免不同的庫或模塊中的名稱(name)發(fā)生沖突。 名稱可以是變量、函數(shù)、類、結構、枚舉等等。此外,命名空間可以讓我

    2024年02月17日
    瀏覽(20)
  • 【C++初階(二)】缺省參數(shù)以及函數(shù)重載

    【C++初階(二)】缺省參數(shù)以及函數(shù)重載

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C++初階之路? ? ??代碼倉庫:NEO的學習日記?? ? ??關注我??帶你學習排序知識 ? ???? 寫C語言代碼的時候 特別是在寫數(shù)據(jù)結構時: 經(jīng)常忘記傳函數(shù)的參數(shù) 或者當前不需要什么參數(shù) C++增加了缺省參數(shù)來解決這個問題 而為了

    2024年02月12日
    瀏覽(19)
  • 【C++雜貨鋪】缺省參數(shù)、函數(shù)重載

    【C++雜貨鋪】缺省參數(shù)、函數(shù)重載

    ?缺省參數(shù)是 聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值 。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。 ?上面代碼在 fun 函數(shù)的形參部分給了缺省值10,這意味著在調(diào)用 fun 函數(shù)的時候可以傳參,也可以不傳參,如果傳參了那形參

    2024年02月16日
    瀏覽(18)
  • C++:命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)

    C++:命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)

    個人主頁 : 個人主頁 個人專欄 : 《數(shù)據(jù)結構》 《C語言》《C++》 本篇博客作為C++知識總結,我們來認識命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)。 那么在介紹命名空間時,我們先用C++的方式打印\\\"hello world\\\"。 其中,using namespace std; 就是一種命名空間的使用。 在

    2024年02月11日
    瀏覽(26)
  • 【C++學習】C++入門 | 缺省參數(shù) | 函數(shù)重載 | 探究C++為什么能夠支持函數(shù)重載

    【C++學習】C++入門 | 缺省參數(shù) | 函數(shù)重載 | 探究C++為什么能夠支持函數(shù)重載

    上一篇文章我介紹了C++該怎么學,什么是命名空間,以及C++的輸入輸出, 這里是傳送門:http://t.csdn.cn/Oi6V8 這篇文章我們繼續(xù)來學習C++的基礎知識。 目錄 寫在前面: 1. 缺省參數(shù) 2. 函數(shù)重載 3. C++是如何支持函數(shù)重載的 寫在最后: 在學習C語言的時候,如果一個函數(shù)存在參數(shù)

    2024年02月13日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包