第六章函數(shù)詳解_第1頁
第六章函數(shù)詳解_第2頁
第六章函數(shù)詳解_第3頁
第六章函數(shù)詳解_第4頁
第六章函數(shù)詳解_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第六章 函數(shù)詳解理解如何將參數(shù)傳遞給函數(shù)剖析引用將引用傳遞給函數(shù)返回引用使用獨立引用重載函數(shù)使用默認(rèn)的函數(shù)參數(shù)重載函數(shù)時要避免多義性本章主要內(nèi)容1122126.1 傳遞參數(shù)的方法通常情況下,計算機(jī)語言有兩種方法將參數(shù)傳遞給子例程。第一種方法就是值調(diào)用(call-by-value)。該方法將實參的值復(fù)制到子程序的形參中。因此,子程序形參的變化對用于調(diào)用它的實參沒有任何影響。引用調(diào)用(call-by-reference)是子 程序傳遞參數(shù)的第2種方法。該方法中,將實參的地址(不是其值)復(fù)制到形參中。在子例程中,該地址用于訪問調(diào)用中指定本講將繼續(xù)分析函數(shù)。討論C+中最重要的3個與函數(shù)相關(guān)的主題:引用

2、、函數(shù)重裁和默認(rèn)參數(shù)。這些功能大大地擴(kuò)展了函數(shù)的功能。引用是一種隱式的指針。函數(shù)重裁允許采用兩種或多種方式實現(xiàn)函數(shù),每種方法都執(zhí)行獨立的任務(wù)。函數(shù)重載是C+支持多態(tài)性的一種方法。使用默認(rèn)參數(shù),就可以為形參指定一個值,在沒有指定相應(yīng)的實參時將自動使用這個默認(rèn)值。首先介紹將參數(shù)傳遞給函數(shù)的兩種方法,以及這些方法的含義。要理解引用就需要理解參數(shù)的傳遞。312一、 C+如何傳遞參數(shù)的實參。也就是說,對形參的修改會影響用于調(diào)用子程序的實參。二、使用指針創(chuàng)建引用調(diào)用Chapter 6 Exm1即使C+默認(rèn)的參數(shù)傳遞方法是值調(diào)用,也可以通過將參數(shù)的地址(指針)傳遞給函數(shù)來手動創(chuàng)建引用調(diào)用。然后,就可以修改函

3、數(shù)外部的實參的值。默認(rèn)情況下,C+使用值調(diào)用來傳遞參數(shù)。也就說函數(shù)內(nèi)部的代碼不能改變用于調(diào)用函數(shù)的參數(shù)。到目前為止本書中的所有程序都使用值調(diào)用方法。Chapter 6 Exm26.2 引用參數(shù)412雖然使用指針運算符就可以手動獲得引用調(diào)用,但是這種方法很笨拙。首先,它必須通過指針執(zhí)行所有操作。其次,它需要在調(diào)用函數(shù)時要記住傳遞參數(shù)的地址(而不是參數(shù)的值)。有幸的是,在C+中可以通知編譯器為某個函數(shù)的一個或幾個形參自動使用引用調(diào)用,而不是值調(diào)用??梢允褂靡脜?shù)(reference parameter)來實現(xiàn)。在使用引用參數(shù)時,就會自動將實參的地址(不是值)傳遞絲函數(shù)。在函數(shù)中,對引用參數(shù)操作被

4、自動解除引用,因此不需要使用指針運算符。通過在函數(shù)聲明中在參數(shù)名稱前加就可以聲明引用參數(shù)。對引用參數(shù)的操作會影響用于調(diào)用函數(shù)的參數(shù),而不是引用參數(shù)本身。Chapter 6 Exm3C語言不支持引用。因此,C語言中創(chuàng)建引用調(diào)用的唯一方法就是使用指針。Chapter 6 Exm4一、返回引用512函數(shù)可以返回引用。在C+編程中,引用返回值有幾種用法。當(dāng)函數(shù)返回引用時,它返回的是指向返回值的一個隱含的指針。這就產(chǎn)生了一種讓人驚訝的可能性:函數(shù)可以用于賦值語句的左側(cè)! Chapter 6 Exm5返回引用時,請注意引用的對象不要超出作用域!Chapter 6 Exm6二、獨立引用C+中包括引用主要是為

5、了支持引用調(diào)用的參數(shù)傳遞方式和用作函數(shù)返回類型,但是也可以聲明一個獨立的引用變量。這被稱為獨立引用(independent reference)。因為獨立引用容易混淆并破壞程序結(jié)構(gòu),所以參數(shù)的引用變量是很少使用的。說明了這個情況后,來簡要地介紹一下獨立引用。Chapter 6 Exm7612三、使用引用時的幾個限制使用獨立引用是不明智的,因為沒有必要,并且還容易使代碼出現(xiàn)混亂。一個變量有兩個名稱會造成混亂的局面。1. 不能引用引用變量。2. 不能創(chuàng)建引用數(shù)組。3. 不能創(chuàng)建指向引用的指針。也就是說不能將運算符用于引用7126.3 函數(shù)重載C+中兩個或多個函數(shù)在參數(shù)聲明不相同的情況下,就可以使用

6、同一個名稱。在這種情況下,使用相同名稱的函數(shù)就被重載了,這個過程就是函數(shù)重載。函數(shù)重載是C+實現(xiàn)多態(tài)性的一種方法。概括地說,要重裁函數(shù),只需聲明它的不同版本。編譯器則會處理剩余的工作。但是必須遵守一個重要的限制條件:每個重載函數(shù)的參數(shù)類型或數(shù)量必須不同。兩個函數(shù)只是在返回類型上不同是不夠的。它們必須有不同的參數(shù)數(shù)量或類型(返回類型不是在所有的情況下都能提供足夠信息,以使C+判斷使用哪個函數(shù))。當(dāng)然,重載函數(shù)的返回類型也可以不同。調(diào)用重載函數(shù)時,就會執(zhí)行形參與實參相匹配的那個函數(shù)。Chapter 6 Exm8函數(shù)重載支持“一個接口多種方法”的多態(tài)性概念Chapter 6 Exm9函數(shù)重載的價值就

7、是允許使用相問的名稱訪問相關(guān)函數(shù)組。812函數(shù)重載的另一個優(yōu)點就是可以定義相同函數(shù)的略為不同的版本,專門用于它們要處理的數(shù)據(jù)類型。(體現(xiàn)效率)只在形參和實參之間不能直接匹配時才發(fā)生自動轉(zhuǎn)換,否則使用定義的重載函數(shù)。Chapter 6 Exm10自動類型轉(zhuǎn)換和重載自動類型轉(zhuǎn)換和重載如第2章所述,C+提供某些自動類型轉(zhuǎn)換功能。這些轉(zhuǎn)換也可應(yīng)用于重載函數(shù)的參數(shù)。Chapter 6 Exm11Chapter 6 Exm11_1項目6-1:創(chuàng)建重載的輸出函數(shù)Chapter 6 Project 6_1912接下來,要討論的與函數(shù)相關(guān)的功能就是默認(rèn)參數(shù)。在C+中,可以為參數(shù)指定默認(rèn)值,在函數(shù)調(diào)用中沒有指定與

8、形參相對應(yīng)的實參時就可以自動使用默認(rèn)值。默認(rèn)參數(shù)可以簡化對復(fù)雜函數(shù)的調(diào)用。有時它們也可以用作函數(shù)重載的簡寫形式。6.4 默認(rèn)的函數(shù)參數(shù)Chapter 6 Exm12創(chuàng)建具有默認(rèn)參數(shù)值的函數(shù)時,默認(rèn)值必須只指定一次,并且必須在文件中首次聲明函數(shù)時指定。接受默認(rèn)值的所有參數(shù)都必須出現(xiàn)在不接受默認(rèn)值的參數(shù)的右側(cè)。一旦開始定義接受默認(rèn)值的參數(shù),后面就不能指定不帶默認(rèn)值的參數(shù)。 C+中包括默認(rèn)值的一個原因就是它們使程序員能處理更復(fù)雜的問題。為了處理各種各樣的情況,通常函數(shù)在最常用的參數(shù)之外還要包括更多的參數(shù)。因此,如果應(yīng)用默認(rèn)參數(shù),就需要記住對確切情形有意義的參數(shù),不需要指定所有在最普遍情況下使用的參數(shù)

9、。1012一、默認(rèn)參數(shù)與重載默認(rèn)參數(shù)的應(yīng)用之一就是函數(shù)重載的簡寫形式。Chapter 6 Exm13二、正確使用默認(rèn)參數(shù)雖然如果能正確使用默認(rèn)參數(shù),它會是一個功能強(qiáng)大的工具,但是它們也可能被濫用。默認(rèn)參數(shù)的意義在于允許函數(shù)以有效和易用的方式執(zhí)行,與此同時保持相當(dāng)?shù)撵`活性。為此,所有默認(rèn)參數(shù)都應(yīng)該反映通常使用函數(shù)的方式,或合理的替代用法。如果一個參數(shù)沒有通常與它相關(guān)的值,就不應(yīng)該聲明默認(rèn)參數(shù)。事實上,如果沒有足夠理由這樣做,聲明默認(rèn)參數(shù)就會破壞代碼結(jié)構(gòu),因此它們?nèi)菀渍`導(dǎo)和使讀程序的人迷惑不清。最后,默認(rèn)參數(shù)應(yīng)該不產(chǎn)生壞影響。也就是說,不慎使用默認(rèn)參數(shù)不應(yīng)該產(chǎn)生不可取消的負(fù)面結(jié)果。例如,忘記指定參數(shù)不應(yīng)該導(dǎo)致刪除重要數(shù)據(jù)文件。1112多義性就是編譯器不能在兩個(或多個)正確重載的函數(shù)之間作出選擇。多義性的語句是錯誤,包括多義性情形的程序不會進(jìn)行編譯。到目前為止,產(chǎn)生多義性的主要原因是C+的自動類型轉(zhuǎn)換。C+會自動嘗試將調(diào)用函數(shù)的實參類型轉(zhuǎn)換成函數(shù)定義的形參類型。6.5 函數(shù)重載和多義性多義性的情況不是由重載帶double和float參數(shù)的myfunc()函數(shù)引起的。這種混淆是由于使用模糊的參數(shù)類型調(diào)用myfunc()函數(shù)所引起的。換句話說,myfunc()重載沒有錯誤,而是特定的函數(shù)調(diào)用有錯誤。Chap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論