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

首頁(yè) > 編程 > C++ > 正文

C++函數(shù)重載與重載原理:命名傾軋

2019-11-06 06:10:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、重載概念與原則:

1、重載概念:

在C原因中,一個(gè)函數(shù)不能與另一個(gè)函數(shù)重名,而在C++中,只要一個(gè)函數(shù)的參數(shù)列表與另一個(gè)函數(shù)的參數(shù)列表不完全相同,函數(shù)名就可以相同。而C++這一特點(diǎn)就是函數(shù)的重載。

同一個(gè)名字因?yàn)閰?shù)列表不同,展現(xiàn)了不同的結(jié)果,也叫靜多態(tài)。

2、重載原則:

①函數(shù)名相同,函數(shù)參數(shù)列表不同(類(lèi)型、個(gè)數(shù)、順序) ②匹配原則1:嚴(yán)格匹配,找到再調(diào)用 ③匹配原則2:通過(guò)隱式類(lèi)型轉(zhuǎn)換尋求一個(gè)匹配,找到則調(diào)用 ④返回值類(lèi)型不構(gòu)成重載條件

/*要是放在C語(yǔ)言中,這段代碼必然是編譯不通過(guò),而在C++中是合乎重載原則的*/#include <iostream>using namespace std;float abs(float i){ return (i >= 0 ? i : -i);}double abs(double i){ return (i >= 0 ? i : -i);}int abs(int i){ return (i >= 0 ? i : -i);}int main(){ /*abbiguous二義性*/ float i = abs(-5.5f);/*默認(rèn)調(diào)用第一個(gè)abs*/ float j = abs(-4.4);/*默認(rèn)調(diào)用第二個(gè),如果注銷(xiāo)掉第二個(gè)abs,編譯時(shí)出錯(cuò)報(bào)二義性錯(cuò)誤*/ cout << i << endl; cout << j << endl; /*浮點(diǎn)數(shù)默認(rèn)大小(類(lèi)型)*/ cout << "sizeof(4.5)=" << sizeof(4.5) << endl;/*default*/ cout << "sizeof(4.5f)=" << sizeof(4.5f) << endl; return 0;}

注意: 重載時(shí)的二義性:如果計(jì)算機(jī)存在有兩種隱式轉(zhuǎn)換選擇,計(jì)算機(jī)不會(huì)去選,而報(bào)二義性錯(cuò)誤 eg1:double可以隱式轉(zhuǎn)換為float或int,如果abs(-4.4)并且定義float與int分別作為參數(shù)的ads(),編譯時(shí)則會(huì)產(chǎn)生二義性 eg2:double->int/float會(huì)產(chǎn)生兩義性,int->long/double也會(huì)產(chǎn)生兩義性。 即兩個(gè)特例重載時(shí)需要注意。 為了避免重載中的二義性問(wèn)題,使用時(shí)按所需強(qiáng)制轉(zhuǎn)換,不要讓計(jì)算機(jī)去自己選擇

二、重載原理:命名傾軋(name mangling)

1、重載原理:name mangling(命名傾軋):

對(duì)于下面這段程序來(lái)說(shuō):

#include <iostream>using namespace std;//不設(shè)置,C++編譯器默認(rèn)傾軋void func(int a){cout<<"a = "<<a<<endl;}void func(char a){cout<<"a = "<<a<<endl;}void func(int a, char b){cout<<"a = "<<a<<endl<<"b = "<<b<<endl;}void func(char a, int b){cout<<"a = "<<a<<endl<<"b = "<<b<<endl;}int main(void){ int a = 10; char b = 'b'; func(a); func(b); func(a,b); func(b,a); return 0;}

上面的程序在經(jīng)過(guò)C++編譯器編譯時(shí)就類(lèi)似于變成了下面這種寫(xiě)法,這種寫(xiě)法與其重載函數(shù)名以及參數(shù)類(lèi)型有關(guān):

#include <iostream>using namespace std;/*定義自動(dòng)傾軋*/void func_i(int a){cout<<"a = "<<a<<endl;}void func_c(char a){cout<<"a = "<<a<<endl;}void func_ic(int a, char b){cout<<"a = "<<a<<endl<<"b = "<<b<<endl;}void func_ci(char a, int b){cout<<"a = "<<a<<endl<<"b = "<<b<<endl;}int main(void){ int a = 10; char b = 'b'; /*調(diào)用也自動(dòng)傾軋*/ func_i(a); func_c(b); func_ic(a,b); func_ci(b,a); return 0;}

2、C++在兼容C時(shí)的不傾軋操作:

在C++中,定義階段與聲明操作階段均會(huì)進(jìn)行傾軋(編譯時(shí)傾軋),使用extern “C”,可以將某函數(shù)設(shè)置為不傾軋,可C++需要傾軋以支持重載,為什么弄一個(gè)不傾軋出來(lái)呢?

分析: 首先,函數(shù)聲明時(shí)與定義時(shí)要么都傾軋,要么都不傾軋,必須得一一對(duì)應(yīng),否則會(huì)報(bào)函數(shù)找不到的錯(cuò)誤。傾軋是編譯時(shí)進(jìn)行的,而對(duì)于C++要兼容C的問(wèn)題,C++就必須兼容C的語(yǔ)法與C庫(kù)(鏈接庫(kù)),C庫(kù)只在連鏈接時(shí)加入,不存在讓C++編譯器去傾軋的問(wèn)題;而C頭文件中聲明的C庫(kù)函數(shù)在調(diào)用時(shí)會(huì)傾軋,要想使用不參加傾軋的C庫(kù)函數(shù),C++中編譯時(shí)就不能傾軋C的頭文件中對(duì)于庫(kù)函數(shù)的聲明,即C庫(kù)中已經(jīng)不能修改不傾軋為傾軋,則必須將頭文件中的聲明也設(shè)置為不傾軋,以此與庫(kù)中相互對(duì)應(yīng)。如果查看C的標(biāo)準(zhǔn)頭文件,可以發(fā)現(xiàn)其中有一個(gè)extern “C”,表示不傾軋C的函數(shù)聲明。如下是string.h頭文件中的一部分:

/*查看string.h,發(fā)現(xiàn)在函數(shù)聲明之前,就對(duì)C++編譯器的編譯方式進(jìn)行聲明extern "C",即聲明為:C++編譯器在編譯時(shí)不傾軋*/#ifndef _INC_STRING#define _INC_STRING#ifdef __cplusplus //如果是C++編譯器就要進(jìn)行不傾軋?jiān)O(shè)置extern "C" {#endif... //函數(shù)聲明等#ifdef __cplusplus//與上面匹配}#endif...

分別查看不同集成承環(huán)境中的string.h文件,都是有對(duì)函數(shù)的extern “C”不傾軋限定:

這里寫(xiě)圖片描述

舉例說(shuō)明:

#include <iostream>#include <string.h>using namespace std;extern "C"{ void func(int a){cout<<"a = "<<a<<endl;}}int main(void){ int a = 10; func(a); return 0;}

由于定義時(shí)不傾軋,而調(diào)用時(shí)傾軋,經(jīng)過(guò)C++編譯器,其代碼成為:

#include <iostream>using namespace std;/*定義時(shí)設(shè)置成不傾軋,在編譯時(shí),其函數(shù)名依舊相同*/void func(int a){cout<<"a = "<<a<<endl;}int main(void){ int a = 10; /*經(jīng)C++編譯器,函數(shù)名變?yōu)閮A軋后的函數(shù)名*/ func_i(a); return 0;}

這樣的代碼是不能夠完成編譯的。而要上面的函數(shù)能夠正常調(diào)用,要么定義與調(diào)用時(shí)均遵循默認(rèn)的傾軋,要么均設(shè)置為不傾軋,做法如下:

/*main.cpp*/#include<iostream>#include"func.h"using namespace std;int main(void){ int a = 10; func(a); return 0;}/*func.c*/#include<iostream>using namespace std;extern "C"{ void func(int a){cout<<"a = "<<a<<endl;}}/*func.h*/#ifndef FUNC_H_#define FUNC_H_extern "C" void func(int);//聲明為不傾軋,調(diào)用根據(jù)聲明調(diào)用,自然不傾軋#endif

將函數(shù)聲明與函數(shù)定義時(shí),都設(shè)置為不傾軋即可。當(dāng)然均不設(shè)置,采用默認(rèn)也是可以編譯通過(guò)的。但是聲明與定義兩部分只要任意一個(gè)設(shè)置為傾軋,另一個(gè)設(shè)置為不傾軋,編譯就不能通過(guò)。

測(cè)試結(jié)果如下:

聲明中不加extern “C”,編譯出錯(cuò): 這里寫(xiě)圖片描述 聲明中加extern “C”,編譯不出錯(cuò): 這里寫(xiě)圖片描述

總之一句話,傾軋是C++為了實(shí)現(xiàn)函數(shù)重載而設(shè)計(jì)的,不傾軋的extern “C”則是為了兼容C而后實(shí)現(xiàn)的。我們編程一般犯不著對(duì)自定義的C++函數(shù)設(shè)置。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

大陆一级毛片免费观看| 欧美成人合集magnet| 国产另类自拍| 91香蕉国产线在线观看| 免费黄色网址在线观看| 无遮挡在线观看| 欧美三级网站在线观看| 福利小视频在线观看| 亚洲蜜桃精久久久久久久久久久久| 国产最新精品| 天天做天天爱天天综合网2021| 成人一区二区av| 久久精品黄色片| 亚洲婷婷影院| 日韩漫画puputoon| 一区二区三区毛片| 超碰91在线| 国产欧美一区二区三区小说| 五月天色婷婷综合| 国产精品久久久久久av福利| 搡的我好爽在线观看免费视频| 日韩经典中文字幕在线观看| 国产精品av免费| 欧美 日韩 国产一区二区在线视频| 国产精品99精品无码视亚| 久热中文字幕在线观看| 精品人妻一区二区三区三区四区| 欧美大片顶级少妇| 99精品视频网站| 日韩欧美一区二区三区四区五区| 国产精品福利导航| 亚洲毛片网站| 欧美午夜不卡| 亚洲色图35p| 99aiav| 国产福利在线| 欧美一区二区三区久久精品茉莉花| 亚洲va码欧洲m码| 国产资源在线观看入口av| 韩国国内大量揄拍精品视频| 亚洲视频一区二区在线| 日本不卡高字幕在线2019| 蜜桃传媒视频麻豆一区| 欧美黑人xx片| 免费毛片一区二区三区久久久| 久久99热在线观看7| 欧美视频一区二区在线观看| 国产一二三区在线播放| 综合分类小说区另类春色亚洲小说欧美| 91网站免费| 中文字幕一区免费在线观看| 视频免费一区| 国产一区久久| 肉色超薄丝袜脚交69xx图片| www.av网站| 色综合视频在线观看| 国产情侣自拍av| 国产精品二区二区三区| 在线国产日本| 91一区二区三区在线播放| 伪装者在线观看完整版免费| 一级在线免费观看| 日本不卡在线播放| 欧美 日韩 国产 一区| 日日摸夜夜添一区| 色婷婷综合久久久久久| 91麻豆精品国产| 国产精品小仙女| 清纯唯美一区二区三区| 夜夜精品浪潮av一区二区三区| 香蕉久久夜色精品国产使用方法| 美女精品视频一区| 天堂中文字幕在线观看| 国产成人亚洲综合青青| 欧美国产视频日韩| 精品一区二区三区在线播放视频| av女优在线播放| 日韩精品一区二区三区四区视频| www.亚洲视频| 亚洲中无吗在线| 邻居大乳一区二区三区| 亚洲品质自拍| 日韩影视在线| 狠狠综合久久av一区二区| 麻豆精品一区| 中文字幕佐山爱一区二区免费| 69成人精品免费视频| 日韩久久久久久久| 奇米色一区二区| 欧美日韩美女一区二区| 超碰在线国产97| 五十路六十路七十路熟婆| 亚洲美女爱爱视频| 国产精品www色诱视频| aa日韩免费精品视频一| 天天操夜夜欢| 日本少妇xxxx软件| 激情丁香久久| 成人网免费看| 亚洲综合日韩| av黄色在线观看| 中文精品无码中文字幕无码专区| 黄大色黄女片18第一次| 福利一区二区三区四区| 欧美伦理一区二区| 韩日在线一区| 91高潮大合集爽到抽搐| 中文字幕人成人乱码| 欧美黑人性受xxxx喷水| 女同性一区二区三区人了人一| 五月婷婷狠狠操| 亚洲黄色小视频| 岛国毛片在线播放| 中文在线天堂库| 8av国产精品爽爽ⅴa在线观看| 国内精品在线一区| 99国产精品免费视频观看| 国产激情无码一区二区三区| 亚洲欧洲一区| 国产精品中出一区二区三区| www.九色在线| 日韩亚洲精品在线观看| 亚洲女同在线| 久久精品国产精品| 三叶草欧洲码在线| 99热99re6国产在线播放| 精品人妻一区二区三区日产| 日日骚欧美日韩| 国产精品国产三级国产aⅴ浪潮| 99亚洲精品视频| 亚洲 国产 日韩 综合一区| 波多野结衣午夜| 亚洲精品中文字幕在线观看| 无码人妻一区二区三区精品视频| 久久xxxx精品视频| av先锋影音少妇| 久久精品一区四区| 狂野欧美一区| 高清在线一区| 久草在线成人| 黄色片大全在线观看| 亚洲精品视频一区二区三区| 国产精品白嫩白嫩大学美女| 亚洲一二三区不卡| 伊是香蕉大人久久| 日韩肉感妇bbwbbwbbw| 黄色电影免费在线观看| 日本免费黄色网| 免费观看成人毛片| 7m精品福利视频导航| 成人激情免费视频| 亚洲欧美日韩在线综合| 成人羞羞国产免费| 精品中文字幕乱| 亚洲影院久久精品| 国产伊人精品在线| 久久婷婷国产综合国色天香| a级网站在线观看| 国产精品国产三级国产试看| 这里只有精品9| 亚洲综合av影视| 高清一区二区| av中文字幕播放| 国产精品午夜一区二区三区| 亚洲国产精品va| 亚洲天堂视频一区| 久久久久久久久网站| 精品国产老师黑色丝袜高跟鞋| 国产丝袜控视频在线观看| 在线不卡a资源高清| 欧美日韩黄色网| h片在线观看视频| 日韩在线观看视频一区二区| 日日狠狠久久| 欧美激情亚洲天堂| 欧美一区二区三区艳史| 91情侣在线视频| 天天综合天天综合色| 亚洲美女在线一区| 久久99久久99精品中文字幕| 日本xxxxxwwwww| 国产精品一卡二卡| 日韩精品福利片午夜免费观看| 国产成a人亚洲精v品| 玖草视频在线观看| 日本在线视频免费| 国产毛片久久| 亚洲黄色一区二区三区| 欧美专区在线观看一区| 57pao国产成永久免费视频| 男人扒开美女尿口无遮挡图片| 天天做日日爱夜夜爽| 男人和女人啪啪网站| 日韩一区二区a片免费观看| 久久福利一区| 中文字幕视频网站| 熟女少妇一区二区三区| 最新av中文字幕| 欧美亚洲丝袜传媒另类| 欧美free性69| 欧美www视频在线观看| 波多野结衣家庭教师在线观看| 神马一区二区三区| 亚洲欧美一区二区三区孕妇| 欧美手机在线观看| 日韩精品中文字幕一区二区三区| 亚州av日韩av| 欧美a级片视频| 九九热精品在线视频| 男人操女人下面视频| 久久久久久久久一区| 久久久久久一区二区三区| 亚洲精品国产久| 免费在线视频你懂得| 国产欧美视频一区二区| 日韩欧美国产午夜精品| 欧美丰满美乳xxⅹ高潮www| 日本一区二区在线播放| 黑巨茎大战欧洲金发美女| 亚洲图片小说区| 成人免费直播live| 日本在线观看www| 日本欧美亚洲| 欧美成人一区二区三区高清| 国产一级二级在线观看| 91直播在线观看| 国产欧美一区二区精品性色超碰| 国产精品一区二区三区www| 亚州精品国产精品乱码不99按摩| 亚洲久久在线观看| 日韩av在线电影观看| 无码熟妇人妻av| 久久久久在线| 中文av在线播放| 久久久久国产精品午夜一区| 亚洲美女在线视频| 男女视频一区二区| 日产精品久久久久久久蜜臀| 高清欧美性猛交xxxx黑人猛| 亚洲国产精品久久久久婷蜜芽| 91av视频在线观看| 亚洲精品久久久久久久久久久久久久| 亚洲精品v日韩精品| 亚洲精品一区二区三区区别| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美激情一二区| 久草在线国产| 97精品视频在线播放| 国产一区二区三区不卡在线观看| 欧美一级二级三级| 成年人免费观看视频网站| 97精品国产97久久久久久粉红| 亚洲欧美日本一区二区三区| 日韩在线视频精品| 九色91蝌蚪| 国产日本精品视频| 久久精品精品电影网| 亚洲女同性videos| 北条麻妃一区二区三区在线| 极品白嫩少妇无套内谢| 国产精久久久久久| 成人情趣片在线观看免费| 婷婷在线播放| 日韩av电影在线观看| 中文字幕乱在线伦视频中文字幕乱码在线| 日批视频在线看| 一级黄色片毛片| 亚洲成人av在线| 成人欧美一区二区三区小说| 精品国产乱码一区二区| av片在线免费| 浴室偷拍美女洗澡456在线| 国产亚洲毛片| 亚洲精品看片| 色偷偷av男人的天堂| 亚洲三级精品| 色啦啦av综合| 蜜桃一区二区三区在线| 桃乃木香奈av在线| 68精品国产免费久久久久久婷婷| 视频亚洲一区二区| 免费看成人人体视频| 欧美日韩一区二区三区在线| 成人精品在线播放| 亚洲精品在线观| 国产精品白丝jk黑袜喷水| 亚洲一区二区三区四区五区| 日本一区视频在线播放| 国产激情片在线观看| 国产精品美女久久久久av超清| 夜夜嗨aⅴ一区二区三区| 亚洲国产电影在线观看| 人妻熟女aⅴ一区二区三区汇编| 国产精品一页| heisi视频网在线观看| 波多野结衣电车痴汉| 中文字幕一区二区精品区| 日韩欧美中文一区| 视频免费裸体网站| av在线免费网址| 一区二区精品国产| 免费高清成人在线| 亚洲成人精品一区| 一本大道综合伊人精品热热| 国产精品久久久久久久久夜色| 久久久久久91| 欧美大交乱xxxxbbbb| 欧美日韩国产页| 日韩成人av网| 国产欧美精品va在线观看| 亚洲调教一区| 国产中文字幕乱人伦在线观看| 黄页视频在线免费观看| 成人羞羞动漫| 亚洲深夜福利| 久久麻豆视频| 激情亚洲另类图片区小说区| 香港一级纯黄大片| 欧美一区二区三区在线电影| www.狠狠插| 欧美日韩中文字幕一区二区| 国产资源中文字幕| 久久久久久成人网| 奇米一区二区三区四区久久| 国产xxxx在线观看| 亚洲尤物在线视频观看| 九九99玖玖| 91精品国产美女浴室洗澡无遮挡|