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

首頁 > 編程 > C++ > 正文

高質(zhì)量C++/C編程指南(六)

2024-09-07 17:00:55
字體:
供稿:網(wǎng)友
第6章 函數(shù)設(shè)計(jì)
函數(shù)是C++/C程序的基本功能單元,其重要性不言而喻。函數(shù)設(shè)計(jì)的細(xì)微缺點(diǎn)很容易導(dǎo)致該函數(shù)被錯(cuò)用,所以光使函數(shù)的功能正確是不夠的。本章重點(diǎn)論述函數(shù)的接口設(shè)計(jì)和內(nèi)部實(shí)現(xiàn)的一些規(guī)則。

函數(shù)接口的兩個(gè)要素是參數(shù)和返回值。C語言中,函數(shù)的參數(shù)和返回值的傳遞方式有兩種:值傳遞(pass by value)和指針傳遞(pass by pointer)。C++ 語言中多了引用傳遞(pass by reference)。由于引用傳遞的性質(zhì)象指針傳遞,而使用方式卻象值傳遞,初學(xué)者常常迷惑不解,容易引起混亂,請(qǐng)先閱讀6.6節(jié)“引用與指針的比較”。

6.1 參數(shù)的規(guī)則
l 【規(guī)則6-1-1】參數(shù)的書寫要完整,不要貪圖省事只寫參數(shù)的類型而省略參數(shù)名字。如果函數(shù)沒有參數(shù),則用void填充。

例如:

void SetValue(int width, int height); // 良好的風(fēng)格

void SetValue(int, int); // 不良的風(fēng)格

float GetValue(void); // 良好的風(fēng)格

float GetValue(); // 不良的風(fēng)格

l 【規(guī)則6-1-2】參數(shù)命名要恰當(dāng),順序要合理。

例如編寫字符串拷貝函數(shù)StringCopy,它有兩個(gè)參數(shù)。如果把參數(shù)名字起為str1和str2,例如

void StringCopy(char *str1, char *str2);

那么我們很難搞清楚究竟是把str1拷貝到str2中,還是剛好倒過來。

可以把參數(shù)名字起得更有意義,如叫strSource和strDestination。這樣從名字上就可以看出應(yīng)該把strSource拷貝到strDestination。

還有一個(gè)問題,這兩個(gè)參數(shù)那一個(gè)該在前那一個(gè)該在后?參數(shù)的順序要遵循程序員的習(xí)慣。一般地,應(yīng)將目的參數(shù)放在前面,源參數(shù)放在后面。

如果將函數(shù)聲明為:

void StringCopy(char *strSource, char *strDestination);

別人在使用時(shí)可能會(huì)不假思索地寫成如下形式:

char str[20];

StringCopy(str, “Hello World”); // 參數(shù)順序顛倒

l 【規(guī)則6-1-3】如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類型前加const,以防止該指針在函數(shù)體內(nèi)被意外修改。

例如:

void StringCopy(char *strDestination,const char *strSource);

l 【規(guī)則6-1-4】如果輸入?yún)?shù)以值傳遞的方式傳遞對(duì)象,則宜改用“const &”方式來傳遞,這樣可以省去臨時(shí)對(duì)象的構(gòu)造和析構(gòu)過程,從而提高效率。

2 【建議6-1-1】避免函數(shù)有太多的參數(shù),參數(shù)個(gè)數(shù)盡量控制在5個(gè)以內(nèi)。如果參數(shù)太多,在使用時(shí)容易將參數(shù)類型或順序搞錯(cuò)。

2 【建議6-1-2】盡量不要使用類型和數(shù)目不確定的參數(shù)。

C標(biāo)準(zhǔn)庫函數(shù)printf是采用不確定參數(shù)的典型代表,其原型為:

int printf(const chat *format[, argument]…);

這種風(fēng)格的函數(shù)在編譯時(shí)喪失了嚴(yán)格的類型安全檢查。

6.2 返回值的規(guī)則
l 【規(guī)則6-2-1】不要省略返回值的類型。

C語言中,凡不加類型說明的函數(shù),一律自動(dòng)按整型處理。這樣做不會(huì)有什么好處,卻容易被誤解為void類型。

C++語言有很嚴(yán)格的類型安全檢查,不允許上述情況發(fā)生。由于C++程序可以調(diào)用C函數(shù),為了避免混亂,規(guī)定任何C++/ C函數(shù)都必須有類型。如果函數(shù)沒有返回值,那么應(yīng)聲明為void類型。

l 【規(guī)則6-2-2】函數(shù)名字與返回值類型在語義上不可沖突。

違反這條規(guī)則的典型代表是C標(biāo)準(zhǔn)庫函數(shù)getchar。

例如:

char c;

c = getchar();

if (c == EOF)

按照getchar名字的意思,將變量c聲明為char類型是很自然的事情。但不幸的是getchar的確不是char類型,而是int類型,其原型如下:

int getchar(void);

由于c是char類型,取值范圍是[-128,127],如果宏EOF的值在char的取值范圍之外,那么if語句將總是失敗,這種“危險(xiǎn)”人們一般哪里料得到!導(dǎo)致本例錯(cuò)誤的責(zé)任并不在用戶,是函數(shù)getchar誤導(dǎo)了使用者。

l 【規(guī)則6-2-3】不要將正常值和錯(cuò)誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,而錯(cuò)誤標(biāo)志用return語句返回。

回顧上例,C標(biāo)準(zhǔn)庫函數(shù)的設(shè)計(jì)者為什么要將getchar聲明為令人迷糊的int類型呢?他會(huì)那么傻嗎?

在正常情況下,getchar的確返回單個(gè)字符。但如果getchar碰到文件結(jié)束標(biāo)志或發(fā)生讀錯(cuò)誤,它必須返回一個(gè)標(biāo)志EOF。為了區(qū)別于正常的字符,只好將EOF定義為負(fù)數(shù)(通常為負(fù)1)。因此函數(shù)getchar就成了int類型。

我們?cè)趯?shí)際工作中,經(jīng)常會(huì)碰到上述令人為難的問題。為了避免出現(xiàn)誤解,我們應(yīng)該將正常值和錯(cuò)誤標(biāo)志分開。即:正常值用輸出參數(shù)獲得,而錯(cuò)誤標(biāo)志用return語句返回。

函數(shù)getchar可以改寫成 BOOL GetChar(char *c);

雖然gechar比GetChar靈活,例如 putchar(getchar()); 但是如果getchar用錯(cuò)了,它的靈活性又有什么用呢?

2 【建議6-2-1】有時(shí)候函數(shù)原本不需要返回值,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá),可以附加返回值。

例如字符串拷貝函數(shù)strcpy的原型:

char *strcpy(char *strDest,const char *strSrc);

strcpy函數(shù)將strSrc拷貝至輸出參數(shù)strDest中,同時(shí)函數(shù)的返回值又是strDest。這樣做并非多此一舉,可以獲得如下靈活性:

char str[20];

int length = strlen( strcpy(str, “Hello World”) );

2 【建議6-2-2】如果函數(shù)的返回值是一個(gè)對(duì)象,有些場(chǎng)合用“引用傳遞”替換“值傳遞”可以提高效率。而有些場(chǎng)合只能用“值傳遞”而不能用“引用傳遞”,否則會(huì)出錯(cuò)。

例如:

class String

{…

// 賦值函數(shù)

String & operate=(const String &other);

// 相加函數(shù),如果沒有friend修飾則只許有一個(gè)右側(cè)參數(shù)

friend String operate+( const String &s1, const String &s2);

private:

char *m_data;

}

String的賦值函數(shù)operate = 的實(shí)現(xiàn)如下:

String & String::operate=(const String &other)

{

if (this == &other)

return *this;

delete m_data;

m_data = new char[strlen(other.data)+1];

strcpy(m_data, other.data);

return *this; // 返回的是 *this的引用,無需拷貝過程

}

對(duì)于賦值函數(shù),應(yīng)當(dāng)用“引用傳遞”的方式返回String對(duì)象。如果用“值傳遞”的方式,雖然功能仍然正確,但由于return語句要把 *this拷貝到保存返回值的外部存儲(chǔ)單元之中,增加了不必要的開銷,降低了賦值函數(shù)的效率。例如:

String a,b,c;

a = b; // 如果用“值傳遞”,將產(chǎn)生一次 *this 拷貝

a = b = c; // 如果用“值傳遞”,將產(chǎn)生兩次 *this 拷貝

String的相加函數(shù)operate + 的實(shí)現(xiàn)如下:

String operate+(const String &s1, const String &s2)

{

String temp;

delete temp.data; // temp.data是僅含‘

国产日韩综合一区二区性色av| 男人天堂网在线| 国产一级在线观看| 不卡影院免费观看| 精品欧美一区二区精品少妇| 亚洲欧美日韩第一区| 丝袜中文在线| 日本一级大毛片a一| 久久精品女同亚洲女同13| 欧美69xx性欧美| 一区二区三区视频在线免费观看| 欧美日韩国产成人在线| 欧美黑人视频一区| 精品va天堂亚洲国产| 在线观看福利一区| h七七www色午夜日本| 国产乱码字幕精品高清av| 日本阿v视频在线观看| 成人久久精品视频| 好吊色在线观看| 一本久久a久久免费精品不卡| 五月天婷婷在线观看视频| 韩国av一区| 一区二区三区四区不卡| 性欧美长视频免费观看不卡| 国产专区综合网| 久久久www成人免费精品| 美女高潮视频在线看| 黄色av电影在线播放| 久久99亚洲精品| 久草在线资源站手机版| 超薄肉色丝袜一二三| 你懂得视频在线观看| 2017欧美狠狠色| 亚洲人亚洲人成电影网站色| 久久亚洲精品无码va白人极品| 亚洲图片在线视频| 五月婷婷在线观看视频| 欧美精品一本久久男人的天堂| 亚洲第一区第一页| 日本香蕉视频在线观看| www.伊人久久| 午夜视频在线看| 亚洲主播在线观看| 日韩欧美一区二区一幕| 天天综合色天天综合色hd| 9久re热视频在线精品| 日本精品影院| 韩国av一区二区三区| 欧美日韩国产观看视频| 在线观看免费黄色片| 欧美偷拍一区二区| 国产三级做爰在线观看| 精品视频一二| 亚洲精品一区二区三区樱花| 欧美午夜精品理论片| 婷婷综合久久中文字幕蜜桃三电影| 在线观看中文字幕的网站| 国产一二三区精品视频| 欧美一区二区大胆人体摄影专业网站| 国产精久久久久| 中文在线三区| 亚洲卡通欧美制服中文| 最爽无遮挡行房视频在线| 相泽南亚洲一区二区在线播放| 欧美日韩ab片| caoporn成人免费视频在线| 日本私人网站在线观看| www.亚洲一区| 美国av一区二区三区| 国产精品99久久久久久久| 红桃一区二区三区| 一本大道熟女人妻中文字幕在线| 国产精品国三级国产av| 91日韩在线视频| 色菇凉天天综合网| 亚洲人成电影网| 朝桐光av在线一区二区三区| 国产成人精品免高潮在线观看| 欧美r级电影| 国产二级片在线| 一区二区三区精品99久久| 久久aⅴ乱码一区二区三区| 亚洲欧美偷拍视频| 成人一区二区| 日韩欧美aaaaaa| 中国一级片黄色一级片黄| 91蜜桃在线免费视频| 超碰在线无需免费| 国产二区视频在线观看| 久久人妻少妇嫩草av蜜桃| 国产欧美日韩视频一区二区三区| 免费黄漫在线观看| 国产精选久久久久久| 欧美精品成人一区二区在线观看| 清纯唯美亚洲色图| 国产性一乱一性一伧一色| 亚洲人成免费| 亚洲欧洲综合另类在线| 国产亚洲欧洲高清| 国产成人精品片| 台湾亚洲精品一区二区tv| √最新版天堂资源网在线| 精品少妇人妻av免费久久洗澡| 精品无人区卡一卡二卡三乱码免费卡| 久久精品视频观看| 免费人成在线观看视频播放| 国产精品一区二区在线免费观看| 视频一区二区三区入口| 欧美中文字幕一二三区视频| chinese全程对白| 你懂的视频一区二区| 久久99精品一区二区三区| 日韩伦理电影网站| 成人黄色片视频网站| 国产欧美日韩一区二区三区四区| 粗暴蹂躏中文一区二区三区| freexxxx性特大另类| 亚洲少妇中文字幕| 亚洲va在线| 999这里只有精品| 在线激情影院一区| 91tv亚洲精品香蕉国产一区| 午夜激情福利视频| 色婷婷精品久久二区二区蜜臀av| 国产精品诱惑| 欧美巨大xxxx| 成人av网站在线| 国产精品v一区二区三区| 免费看日产一区二区三区| 久久国产小视频| 成人网男人的天堂| 中文字幕在线视频第一页| 天堂√在线观看一区二区| 亚洲一区二区三区四区的| 先锋影音在线资源站91| 亚洲色图综合图区| 国产精品区一区二区三含羞草| 亚洲国产精品va在线| 成人国产精品免费网站| 国产精品97| 日韩在线你懂的| 欧美激情综合色综合啪啪| 色综合久久88色综合天天免费| 亚洲美女少妇无套啪啪呻吟| 日本青青草视频| 国产日产精品一区二区三区的介绍| 国产毛片毛片毛片| 一二三四社区在线视频| 天天摸日日操| 国产精品欧美一区二区三区| 欧美日本啪啪无遮挡网站| 欧美一级片在线免费观看| 久久影院朴妮唛| 国产精品冒白浆免费视频| 亚洲综合在线网| 无码人妻精品一区二区三区蜜桃91| 国产馆手机在线观看| 7777奇米亚洲综合久久| 亚洲精品韩国| 日韩美女av在线免费观看| 国产美女免费观看| 丰满肉肉bbwwbbww| 91在线高清免费观看| 网址你懂得在线观看| 日本少妇bbwbbw精品| 欧美美女在线直播| 欧美三级在线视频| 制服丝袜亚洲精品中文字幕| 久久在线观看| 日韩电影免费观看高清完整| 一级片在线观看视频| 国产二级c片l毛片| 午夜老司机在线观看| 清纯粉嫩极品夜夜嗨av| 国产欧美亚洲精品a| 午夜免费欧美电影| 捆绑紧缚一区二区三区视频| 色综合网站在线| 日韩精品在线免费观看| 欧美日韩在线精品一区二区三区| 欧美另类色图| 免费黄色av网址| 欧美日韩亚洲丝袜制服| 最新国产在线拍揄自揄视频| 成人性生交大片免费看96| 波多野结衣一区二区在线| 欧美疯狂做受xxxx富婆| xxx在线播放| 亚洲va码欧洲m码| 亚洲va国产va天堂va久久| 国产乱码一区二区三区| 日韩经典第一页| 成年人网站免费观看| 亚洲香蕉伊综合在人在线视看| 成年人视频免费在线观看| 欧美a级黄色大片| 免费在线观看av的网站| 丰满少妇一区二区| 亚洲第一黄色片| 黄色一级二级三级| 国产h色视频在线观看| 亚洲视频在线播放免费| 久久精品青青大伊人av| 久久亚洲精品伦理| 欧美肥妇bbwbbw| 日韩精品一区二区三区丰满| 国产在线视频欧美一区二区三区| 第84页国产精品| 综合久久给合久久狠狠狠97色| 狼人精品一区二区三区在线| 天堂社区 天堂综合网 天堂资源最新版| 麻豆网站在线看| 暖暖视频在线免费观看| 欧美床上激情在线观看| 色天天综合色天天久久| 米仓穗香在线观看| 狠狠躁夜夜躁人人爽天天高潮| mm视频在线视频| 在线观看日韩中文字幕| 91久久精品国产91久久性色| 亚洲综合视频一区| www男人的天堂| 精品国产91久久久久久老师| 在线免费一区二区| 欧美色图在线播放| 污视频网站在线播放| 韩国av电影免费观看| 亚洲综合小说网| 日韩精品一区二区三区四区| 夜夜夜夜夜夜操| 亚洲成人久久久久| 国产亚洲一区二区精品| 国模吧精品人体gogo| 国产999精品| 国产精品无码永久免费888| 亚洲精品久久久久国产| 一区二区三区区四区播放视频在线观看| 久久精品电影一区二区| 国产视频青青| 超碰97在线免费| 成人av影视| 亚洲另类xxxx| www.亚洲.com| 精品久久久视频| 久久精品视频中文字幕| 精品日本一区二区三区| 免费观看成人在线| 97视频色精品| 久久免费电影网| 久久久久久亚洲综合| 99热免费精品在线观看| 一区二区三区免费看| 偷拍自拍亚洲色图| 中文字幕亚洲国产| 超碰97在线资源| 男女爱爱网站| 无遮挡在线观看| 日韩一区二区三区四区区区| 亚洲精品天堂| 国产精品一区二区欧美黑人喷潮水| 国产一区二区0| 亚洲精品一区二区精华| 国产女主播一区二区三区| 青青久精品观看视频最新| 欧美人与禽猛交乱配视频| 亚洲男人的天堂一区二区| 明星乱亚洲合成图.com| 欧美性猛交xxxx富婆弯腰| 一本色道久久综合狠狠躁的推荐| 一区二区三区四区毛片| 日本福利片在线观看| 亚洲免费在线观看视频| 一道本成人在线| 黑森林精品导航| 91精品国自产在线| 午夜激情一区二区| 午夜成年女人毛片免费观看| 色老板在线视频一区二区| 五月天六月丁香| 中文字幕+乱码+中文字幕一区| 欧美三日本三级少妇三2023| 精品动漫一区二区三区| 亚洲精品18| 熟女俱乐部一区二区| 都市激情亚洲一区| 国产99视频在线| 精品国产1区2区| av首页在线| 欧美亚男人的天堂| 国内激情久久| 天堂资源在线| 日日嗨av一区二区三区四区| 在线观看区一区二| 中文字幕1234区| 国产成人av一区二区三区在线| 国产+人+亚洲| 一区二区三区久久| 奇米精品一区二区三区四区| 99久久一区三区四区免费| 国产91成人video| 国内精品在线观看视频| 日韩精品视频中文在线观看| 日韩av免费在线播放| 秋霞av亚洲一区二区三| 国产综合色激情| 乳奴隷乳フ辱| 国产精品1区2区3区4区| 中文字幕日韩一区二区三区| 激情欧美丁香| 欧美日韩在线免费播放| 久久精品国产成人| av资源中文色综合| 成年人看片网站| 欧美日韩精品在线观看视频| 精品乱码一区二区三区| 国产一区二区三区久久久久久久久| 天堂√在线中文官网在线| 欧美一级片免费观看| 一本大道久久a久久精品综合| 成人黄色av| 亚洲欧美日韩第一区| 裸体女人亚洲精品一区| 免费成人深夜天涯网站| 欧美大电影免费观看| 亚洲精品中文字幕乱码无线| 亚洲天堂网在线播放| 青青视频免费在线观看|