中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C/C++語言中函數重載功能怎么用

發布時間:2021-11-30 17:35:32 來源:億速云 閱讀:291 作者:小新 欄目:編程語言

小編給大家分享一下C/C++語言中函數重載功能怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

“函數重載”指的是可以有多個同名的函數,因此 名稱進行了重載。這兩個術語指的是同一回事,但我們通常使用函數重載。可以通過函數重載來設計? 系列函數——它們完成相同的工作,但使用不同的參數列表。

重載函數就像是有多種含義的動詞。例如,Piggy小姐可以在棒球場為家鄉球隊助威(root),也可以在地里種植(root)菌類作物。根據上下文可以知道在每一種情況下,root的含義是什么。同樣,C++使用上下文來確定要使用的重載函數版本。

函數重載的關鍵是函數的參數列表——也稱為函數特征標(ftmction signature).如果兩個函數的參數數目和類型相同,同時參數的排列順序也相同,則它們的特征標相同,而變量名是無關緊要的。C++允定義名稱相同的函數,條件是它們的特征標不同。如果參數數目和/或參數類型不同,則特征標也不同。例如,可以定義一組原型如下的print()函數:

Void print(const char * str, int width) ; // #1
Void print(double d, int width);   // #2
Void print(long 1, int width);    // #3 
Void print(int i, int width);     // #4 frombyte
Void print(const char *str);     // #5

使用pnnt()函數時,編譯器將根據所采取的用法使用有相應特征標的原型:

print(” Pancakes", 15);   //use #1
print(” syrup");    //use #2
print(” 1999.0,10");    //use #3
print(” 1999,12");    //use #4
print(” 1999L,15");    //use #5 frombyte.com

例如,print(“Pancakes”,15)使用一個字符串和一個整數作為參數,這與#1原型匹配。 ,使用被重載的函數時,需要在函數調用中使用正確的參數類型。例如,對于下面的語句:

Unsigned int year =3210;
print (year, 6);   // ambiguous call

Print()調用與哪個原型匹配呢?它不與任阿原型匹配!沒有匹配的圓形并不會自動停止使用其中的某個函數,因為C++將嘗試使用標準類型轉換強制進行匹配。如果#2原型是print()唯一的原型,則函數調用print(year,6)將把year轉換為double類型。但在上面的代碼中,有3個將數字作為第一個參數的原型,因此有3種轉換year的方式。在這種情況下,C++將拒絕這種函數調用,并將其視為錯誤。

一些看起來彼此不同的特征標是不能共存的。例如,請看下面的兩個原型:

duble cube (double x);
duble cube (double & x);

您可能認為可以在此處使用函數重載,因為它們的特征標看起來不同。然而,請從編譯器的角度來考慮這個問題。假設有下面這樣的代碼:

cout
.<< cube(x);

參數X與double x原型和double &x原型都匹配,因此編譯器無法確定究竟應使用哪個原型。為避免這種混亂,編譯器在檢査函數特征標時,將把類型引用和類型本身視為同一個特征標。 匹配函數時,并不區分const和非const變量。請看下面的原型:

Void dribble(char * bits);
Void dribble (const char *cbits);
Void dabble(char * bits);
Void drivel(const char * bits);

下面列出了各種函數調用對應的原型:

Const char p1[20]="How’s the weather?";
Char p2[20]="How's business?";
Dribble(p1);  // dribble(const char *); 
Dribble(p2);  // dribble(char *);
Dabble(p1);  // no match 
Dabble(p2);  // dabble(char *);
Drivel(p1);  // drivel(const char *);frombyte.com 
Drivel(p2);  // drivel(const char *);

dribble()函數有兩個原型,一個用于const指針,另一個用于常規指針,編譯器將根據實參是否為const來決定使用哪個原型。dribble()函數只與帶非const參數的調用匹配,而drivel()函數可以與帶const或非const參數的調用匹配。drivel?和dabble()之所以在行為上有這種差別,主要是由于將非const值賦給const變量是合法的,但反之則是非法的。

請記住,是特征標,而不是函數類型使得可以對函數進行重載。例如,下面的兩個聲明是互斥的:

long gronk(int n, float m); // same signatures,
double gronk(int n, float m); // hence not allowed

因此,C++不允許以這種方式重載gronk()。返回類型可以不同,但特征標也必須不同:

long gronk(int n; float m); // different signatures,
double gronk(float n# float m); // hence allowed

以上是“C/C++語言中函數重載功能怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂托克前旗| 湾仔区| 景洪市| 佛教| 巧家县| 文昌市| 寿光市| 樟树市| 织金县| 沂南县| 尖扎县| 浙江省| 东平县| 鄢陵县| 新津县| 思茅市| 襄垣县| 松滋市| 万州区| 昭平县| 晋宁县| 瑞丽市| 宾川县| 迭部县| 棋牌| 汉阴县| 北碚区| 繁昌县| 历史| 清镇市| 卢氏县| 张家港市| 大宁县| 葵青区| 定边县| 内黄县| 肃北| 美姑县| 文登市| 焉耆| 观塘区|