日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++簡明講解缺省參數與函數重載的用法_C 語言

作者:努力變好的zz ? 更新時間: 2022-08-11 編程語言

一、缺省參數

缺省參數形象來說就是"備胎"。

1.1缺省參數概念

缺省參數是聲明或定義函數時為函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則采用該默認值,否則使用指定的實參。

#include<iostream>
void P(int a = 3)
{
	printf("%d", a);
}
int main()
{
	P();//打印默認值  3
	P(1);//打印傳送的值  1
	return 0;
}

1.2缺省參數分類

1.全缺省參數

void P(int a = 3,int c = 1,int b = 2)
{
	printf("%d", a);
	printf("%d", b);
	printf("%d", c);
}

二、函數重載

2.1函數重載概念

函數重載:是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這些同名函數的形參列表(參數個數 或 類型 或 順序)必須不同,常用來處理實現功能類似數據類型不同的問題

int Add(int left, int right)
{
return left+right;
}
double Add(double left, double right)
{
return left+right;
}
long Add(long left, long right)
{
return left+right;
}
int main()
{
Add(10, 20);
Add(10.0, 20.0);
Add(10L, 20L);
return 0;
}

觀察上方的函數,我們會發現他們的函數名相同,參數不同(參數類型,參數順序等)只有滿足上述條件就可以進行函數重載
注意:返回類型的不同的函數并不能進行函數重載!

double Add(double left, double right)
{
return left+right;
}
long Add(double left, double right)
{
return left+right;
}

這就是錯誤的函數重載

2.2名字修飾

這里我們思考個問題,為什么C++支持函數重載而C語言卻不支持呢?

在C/C++中,一個程序要運行起來,需要經歷以下幾個階段:預處理、編譯、匯編、鏈接

1.實際我們的項目通常是由多個頭文件和多個源文件構成,例如在(t.cpp中調用了f.cpp中的函數add)時,在鏈接前,t.o文件都沒有f.o中的add函數地址,

2.所以鏈接階段就是為了解決這個問題的,鏈接器看到t.o調用add,但是沒有add的地址,就會到f.o的符號表中找add的地址,然后鏈接到一起。

3.在鏈接時,每個編譯器的函數名修改規則的不一樣,就有可能導致鏈接的不同,如在gcc的編譯器下的函數修飾后名字不變。而g++的函數修飾后變成【_Z+函數長度+函數名+類型首字母】。

4.C++支持函數重載而C卻不支持函數重載的原因是:C語言同函數名時無法區分,而C++可以同過函數參數的不同來區別同名的函數!

原文鏈接:https://blog.csdn.net/bitezz/article/details/124566094

欄目分類
最近更新