亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入剖析C++重載函數的應用

2019-11-17 05:09:43
字體:
來源:轉載
供稿:網友

  重載函數(overloaded function)是C++支持的一種非凡函數,C++編譯器對函數重載的判定更是C++語言中最復雜的內容之一

  首先我們先明確一下重載函數的定義:在相同的聲明域中的函數名相同的,而參數表不同的,即通過函數的參數表而唯一標識并且來區分函數的一種非凡的函數。

  您也許要問,函數為什么要重載呢?何時應該選擇函數重載(function overloading),何時又不呢?這也是我要在下面介紹的。

  當將要定義一組函數,使它們執行一系列的操作,但是它們是應用在不同的參數類型上的。此時我們可以選擇重載函數。

  例如: int z_x_max (int,int); //返回兩個整數的最大值;

int ve_max (const vector <int> &); //返回vector容器中的最大值;

int matrix_max (const matrix &); //返回matrix引用的最大值;

  上面的三個函數都可以大概地說成判定一組數中的最大值,對于函數的用戶來說,他們并不關心函數定義的細節,也就是說他們不關心判定兩個整數的大小和判定數組(vector容器)數的大小應該使用不同的函數,而對于程序的設計者來說這可是不得不想到的。程序員必須記住并查找每個函數名。而函數的重載把程序員從這種問題的復雜性中解放了出來,C++提供了這種支持。上面的三個比較大小的函數可以定義成:

int Max (int,int); //返回兩個整數的最大值;

int Max (const vector <int> &); //返回vector容器中的最大值;

int Max (const matrix &); //返回matrix引用的最大值;

  對!通過參數就可以一眼分辨不同的函數。

  同時函數的重載也有它不適用的情況。例如:在開發文本編輯器的過程中,會涉及到一系列控制光標的函數,如下:

Screen& MoveUp( );

Screen& MoveDown( );

Screen& MoveLeft( );

Screen& MoveRight( );

  看過這四個函數不言而喻,它們是控制光標在屏幕上的位置的,即:向上移動光標,向下移動光標,向左移動光標,向右移動光標。假如我現在把它們寫成重載函數,每個都是Screen& Move( );顯然對于程序員來說是不易理解的。因此對于函數重載的使用我們應遵循應用的邏輯,而不是簡單地因為它的存在就必須使用它。程序員不應該勉強使用重載函數。

  您有沒有想過C++編譯器是如何判定您調用的是重載中的哪個函數?即使它們的函數名相同。您也許會毫不猶豫的回答:是通過函數的參數表。其實識別的過程并不是像您想象中的那么的輕易,其中涉及到參數的等級劃分,參數轉換等諸多方面,下面我就一一進行講解。

  假如有下面一組函數:

void S ( );
void S ( int );
void S ( double , double = 1.2 );
void S ( const char*,const char*);
void Max ( int , int );
//……
int main( )
{
 S (2.4);
 return;
}
  //S (2.4 );的調用與S ( ); S ( int ); S ( double , double = 1.2); S (const char* , const char*),的聲明在同一域,即是可見的。

  那么好,問題出現了。S (2.4 );將調用上面四個函數中的哪一個呢?

  編譯器判定重載函數的第一步是確定該調用中所考慮的重載函數的集合,該函數集合被稱為候選函數(candidant function)。所謂候選函數就是與被調用函數同名的函數。上面的前四個函數都可以成為候選函數(當然可以是多個),而唯有Max ( int , int ) 被排除在外了。

  編譯器判定重載函數的第二步分為兩動作。第一個動作是編譯器從第一步選出的候選函數中調出可行函數(viable function)??尚泻瘮档暮瘮祬祩€數與調用的函數參數個數相同(如S ( int )),或者可行函數的參數可以多一些,但是多出來的函數參數都要有相關的缺省值(如 S (double , double =1.2 );)第二個動作是根據參數類型的轉換規則將被調用的函數實參轉換(conversion)成候選函數的實參。這里本著充分利用參數類型轉換的原則,換句話說,盡可能的使用上參數類型轉換。當然轉換要以候選函數為轉換的目標。上面的函數中只有兩個是可行函數,它們分別是S ( int ); S ( double , double )。

  假如依照參數轉換規則沒有找到可行函數,則該調用就是錯誤的,則說沒有函數與調用匹配,屬于無匹配情況(no match function)。

  編譯器判定重載函數的第三步是從第二步中選出的可行函數中選出最佳可行函數(best match situation)。在最佳可行函數的選擇中,從函數實參類型到相應可行函數參數所用的轉化都要劃分等級,根據等級的劃分(ranked),最后選出最佳可行函數。

  最佳可行函數即編譯器要調用的函數。 更多文章 更多內容請看C/C++技術專題 
 C/C++應用實例專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精自产拍久久久久久蜜| 日韩中文字幕网址| 国产精品久久久av久久久| 亚洲精品免费在线视频| 奇米成人av国产一区二区三区| 国产成人亚洲综合91精品| 欧美激情手机在线视频| 欧美日韩黄色大片| 亚洲va欧美va国产综合剧情| 欧美激情一区二区久久久| 亚洲自拍av在线| 久久久最新网址| 高跟丝袜一区二区三区| 精品一区二区三区四区| 奇米四色中文综合久久| 久久在线视频在线| 欧美主播福利视频| 91久久在线观看| 一色桃子一区二区| 日韩成人在线电影网| 欧美日韩一区二区免费在线观看| 成人深夜直播免费观看| 国产婷婷色综合av蜜臀av| 美女黄色丝袜一区| 国产97在线|亚洲| 91理论片午午论夜理片久久| 亚洲一区二区三区毛片| 欧美精品情趣视频| 日本成人激情视频| 91丨九色丨国产在线| 国产精品一区久久久| 精品久久久久久久大神国产| 91亚洲精品久久久| 亚洲va欧美va在线观看| 久久精品亚洲热| 高清一区二区三区四区五区| 亚洲精品日韩久久久| 久久久久久噜噜噜久久久精品| 亚洲一级免费视频| 2018中文字幕一区二区三区| 久久久999成人| 不卡av在线网站| 欧美亚洲国产视频| 高清亚洲成在人网站天堂| 欧美激情精品久久久久久久变态| 91精品成人久久| 亚洲欧美在线一区| 亚洲激情在线观看视频免费| 国产精品白嫩美女在线观看| 亚洲欧美国产一区二区三区| 中文字幕日韩欧美在线视频| 青草青草久热精品视频在线观看| 亚洲精品国产精品自产a区红杏吧| 最新的欧美黄色| 国产精品视频午夜| 一区二区三区无码高清视频| 色偷偷偷亚洲综合网另类| 欧美裸体xxxx极品少妇软件| 亚洲级视频在线观看免费1级| 亚洲精品综合久久中文字幕| 亚洲一二在线观看| 国内精品久久久久影院 日本资源| 欧美高清视频一区二区| 国产成人一区二区三区电影| 国产精品高潮视频| 91精品国产色综合久久不卡98口| 中文字幕亚洲第一| 日韩精品极品在线观看| 日韩精品在线私人| 亚洲欧洲成视频免费观看| 日产精品99久久久久久| 中文欧美日本在线资源| 久久精品国产免费观看| 97av在线视频| 91黑丝高跟在线| 九九热精品视频国产| 国产精品日日做人人爱| 日韩经典一区二区三区| 中文字幕亚洲精品| 欧美视频中文字幕在线| 91精品国产91久久久久久吃药| 亚洲激情视频在线播放| 在线观看国产精品日韩av| 亚洲精选一区二区| 久久久久久久网站| 全亚洲最色的网站在线观看| 97超级碰在线看视频免费在线看| 2019精品视频| 日本三级韩国三级久久| 国产va免费精品高清在线| 久久这里只有精品99| 日本精品视频网站| 日韩一区二区福利| 亚洲欧美日韩在线一区| 日韩精品福利在线| 欧美日韩国产精品| 97免费中文视频在线观看| 亚洲欧美日韩一区在线| 久久久999精品视频| 98精品国产高清在线xxxx天堂| 欧美日韩一区二区免费在线观看| 日本一区二三区好的精华液| 久久综合久久美利坚合众国| 欧美日韩国产丝袜另类| 亚洲天堂第一页| 亚洲精品电影网站| 久久久久久久电影一区| 欧美裸体xxxxx| 久久久精品网站| 国产成人午夜视频网址| 亚洲综合最新在线| 国产精品日韩在线一区| 欧美日韩亚洲一区二| 97精品久久久中文字幕免费| 亚洲人永久免费| 91网站在线免费观看| 久久久综合av| 91精品国产高清| 亚洲国产日韩一区| 中文字幕日韩在线视频| 日韩av影院在线观看| 欧美激情a∨在线视频播放| 亚洲电影成人av99爱色| 亚洲大胆人体视频| 久久久久久久久久久免费| 亚洲欧美国产一区二区三区| 一区二区在线免费视频| 亚洲一区二区在线| 国产精品第一区| 国产成人综合精品| 欧美亚洲成人免费| 国产精品v片在线观看不卡| 精品国产老师黑色丝袜高跟鞋| 欧美日韩爱爱视频| 国产性猛交xxxx免费看久久| 欧美富婆性猛交| 国产极品精品在线观看| 欧美日韩国产精品专区| 久久久久久91| 欧美激情免费在线| 成人观看高清在线观看免费| 亚洲影院高清在线| 欧美亚洲国产视频| 国产欧美精品一区二区| 亚洲精品日韩激情在线电影| 国产精品日日做人人爱| 尤物yw午夜国产精品视频| 亚洲成人网在线| 亚洲第一av在线| 精品欧美国产一区二区三区| 日韩精品中文字幕在线播放| 一区二区欧美激情| 91亚洲午夜在线| 亚洲第一偷拍网| 久久精品青青大伊人av| 亚洲国产精彩中文乱码av| 欧美精品一区二区免费| 北条麻妃一区二区三区中文字幕| 日韩激情在线视频| 国产丝袜精品第一页| 国产精品日韩专区| 国产日韩中文在线| 日韩亚洲欧美中文高清在线| 久久伊人精品一区二区三区|