freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c程序設(shè)計(jì)教程:第5章-函數(shù)和函數(shù)模板(編輯修改稿)

2024-10-22 16:26 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 對(duì)象的情況將在第 5章介紹 。 返回結(jié)構(gòu)類型對(duì)象時(shí) , 是逐個(gè)字節(jié)地拷貝過來(lái)的 。 ? 當(dāng)函數(shù)返回值是指針或引用對(duì)象時(shí) , 需要特別注意:函數(shù)返回所指的對(duì)象必須繼續(xù)存在 , 因此不能將函數(shù)內(nèi)的局部對(duì)象作為函數(shù)的返回值 。 ? 雖然在 C++中允許返回一個(gè)指向局部靜態(tài)對(duì)象的指針或引用 , 但最好不要這樣做 。 返回引用的函數(shù) ? 函數(shù)可以返回一個(gè)引用 , 將函數(shù)說(shuō)明為返回一個(gè)引用的主要目的是為了將該函數(shù)用在賦值運(yùn)算符的左邊 。 函數(shù)原型的表示方法為: 數(shù)據(jù)類型 amp。 函數(shù)名 ( 參數(shù)列表 ) ; 【 例 】 返回引用的函數(shù)。 include iostream using namespace std。 int a[ ] ={2,4,6,8,10,12}。 //全局?jǐn)?shù)組 intamp。 index(int i)。 //返回引用的函數(shù)原型聲明 void main( ) { index(3)=16。 // 將 a[ 3] 改為 16 cout index(3)endl。 // 輸出 16 } intamp。 index(int i) // {return a[ i] 。} //返回指定下標(biāo)的整數(shù)數(shù)組內(nèi)容 ? 在其他情況下 , 一個(gè)函數(shù)是不能直接用在賦值運(yùn)算符左邊的 。 ? 在定義返回引用的函數(shù)時(shí) , 注意不要返回對(duì)該函數(shù)內(nèi)的局部對(duì)象的引用 。 例如: int amp。 fun ( ) { int a。 //聲明的局部對(duì)象 ... //函數(shù)的其他內(nèi)容 return a。 //返回局部對(duì)象 } ? 由于局部對(duì)象的生存期僅局限于函數(shù)內(nèi)部 , 當(dāng)函數(shù)返回時(shí) ,局部對(duì)象就消失了 , 因此 , 上述函數(shù)返回一個(gè)無(wú)效的引用 。 返回指針的函數(shù) ? 函數(shù)的返回值可以是存儲(chǔ)某種類型數(shù)據(jù)的內(nèi)存地址 ( 例如變量的地址 、 數(shù)組的首地址及指針變量的地址 ) , 稱這種函數(shù)為指針函數(shù) 。 它們的一般 類型標(biāo)識(shí)符 *函數(shù)名 ( 參數(shù)列表 ) 。 【 例 】 使用函數(shù) input 輸入一組數(shù)并返回一個(gè)指針,然后由主函數(shù) main將這組數(shù)顯示出來(lái)的例子。 include iostream using namespace std。 float *input( intamp。 )。 // void main( ) { int num。 float *data。 //聲明指針 data=input(num)。 //調(diào)用函數(shù) , 返回指針賦給 data if(data) { //data不空 , 輸出所指內(nèi)容 for( int i=0。 inum。 i++) //使用指針的下標(biāo)形式 cout data[i] 。 //循環(huán)輸出 delete data。 //釋放內(nèi)存空間 } } float *input( intamp。 n) //定義返回指針的函數(shù) { cout Input number:。 //詢問輸入數(shù)據(jù)數(shù)量 cin n。 if(n=0) return NULL。 //輸入個(gè)數(shù)不合理則退出 float *buf=new float[n]。 //根據(jù)輸入數(shù)據(jù)數(shù)量申請(qǐng)空間 if(buf==0) return NULL。 //沒申請(qǐng)到則退出 for(int i=0。in。i++) //接收輸入數(shù)據(jù) cin buf[i]。 return buf。 //返回指針 } 程序運(yùn)行示范如下: Input number:3 ? 函數(shù) input用于接收用戶輸入 , 數(shù)據(jù)為 float類型 , 它首先提示用戶輸入需輸入的數(shù)據(jù)的個(gè)數(shù) , 然后分配一塊存儲(chǔ)區(qū)域來(lái)保存用戶輸入的數(shù)據(jù) 。 ? 若函數(shù)在運(yùn)行時(shí)返回一個(gè)有效的指針 , 則這個(gè)指針指向的內(nèi)存供用戶輸入數(shù)據(jù) , 數(shù)據(jù)的個(gè)數(shù)可從 input的引用參數(shù)中得知 。 ? 輸入的數(shù)據(jù)個(gè)數(shù)小于或等于零,或內(nèi)存分配失敗時(shí),函數(shù)都返回一個(gè)空指針值,這個(gè)值可作為程序異常的標(biāo)志。 ? 在 C++中,除了內(nèi)存分配失敗之外, new不會(huì)返回空指針,并且沒有任何對(duì)象的地址值為零。 ? 調(diào)用 input函數(shù)時(shí) , 僅需一個(gè)和該函數(shù)返回類型一致的對(duì)象中保存 input函數(shù)返回的指針 , 并在判斷這個(gè)指針值非零的情況下 , 使用這個(gè)指針?biāo)赶虻膬?nèi)存中的數(shù)據(jù) 。 ? 調(diào)用 input函數(shù)的函數(shù)應(yīng)負(fù)責(zé)釋放由 input函數(shù)分配的內(nèi)存 。 ? 一般說(shuō)來(lái),指針?biāo)赶虻膶?duì)象的生存期不應(yīng)低于該指針的生存期。 返回對(duì)象的函數(shù) 【 例 】 函數(shù)返回對(duì)象的例子。 include iostream include string using namespace std。 string input(const int)。 //聲明返回 string void main( ){ int n。 coutInput n=。 cinn。 //接收要處理的字符串?dāng)?shù)量 string str=input(n)。 //將函數(shù)返回的對(duì)象賦給對(duì)象 str coutstrendl。 } string input(const int n){ string s1, s2。 //建立兩個(gè) string類的對(duì)象 ( 均為空串 ) for (int i=0。in。i++) //接收 n個(gè)字符串 { cins1。 s2=s2+s1+ 。 } //將接收的字符串相加 return s2。 //返回 string對(duì)象 } ? 函數(shù) input用來(lái)接收字符串對(duì)象 , 然后將 string的對(duì)象 s2作為返回值 。 運(yùn)行演示如下: Input n=3 zhang san feng zhang san feng 函數(shù)返回值作為參數(shù) ? 如果用函數(shù)返回值作為另一個(gè)函數(shù)的參數(shù) , 這個(gè)返回值必須與參數(shù)的類型一致 。 ? 可以通過函數(shù)指針將函數(shù)作為參數(shù)傳給其他函數(shù) ,以便能夠創(chuàng)造出功能很強(qiáng)的高級(jí)函數(shù)系統(tǒng) 。 ? 函數(shù)指針比較復(fù)雜 , 在 Windows編程中也很重要 , 放在 。 內(nèi)聯(lián)函數(shù) ? 下面的程序使用 isnumber來(lái)判定一個(gè)輸入字符是否屬于數(shù)字字符 , include iostream using namespace std。 int isnumber(char c) {return ( c = 39。039。 amp。amp。 c = 39。939。 ) ? 1 : 0。 } void main( ) { char c。 cout Enter a character:。 cin c。 if (isnumber(c)) cout You entered a digit。 else cout You entered a nondigit。 } ? 函數(shù) isnumber很簡(jiǎn)單 , 但很有用 , 在許多程序中都要用到 , 但對(duì)于這樣一個(gè)簡(jiǎn)單的函數(shù) , 使用函數(shù)調(diào)用 ( 尤其是程序中多次調(diào)用這個(gè)函數(shù)時(shí) ) 卻大大降低了使用效率 。為了提高效率 , 常常將函數(shù) main中對(duì)函數(shù) isnumber的調(diào)用替換成表達(dá)式 , if ( (c=39。039。 amp。amp。 c=39。939。)? 1:0)。 ? 這種替換用手工來(lái)做是很繁瑣的 , 可以讓 C++編譯程序來(lái)做 , 這只要在函數(shù) isnumber的定義前加上關(guān)鍵字inline即可 , 即定義為 : inline int isnumber (char c) ? C++編譯器在遇到對(duì)函數(shù) isnumber 調(diào)用的地方都用這個(gè)函數(shù)體替換該調(diào)用表達(dá)式。使用關(guān)鍵字 inline說(shuō)明的函數(shù)稱內(nèi)聯(lián)函數(shù)。 ? 在 C++中,除具有循環(huán)語(yǔ)句、 switch語(yǔ)句的函數(shù)不能說(shuō)明為內(nèi)聯(lián)函數(shù)外(編譯器會(huì)對(duì)這類錯(cuò)誤給出警告信息),其他函數(shù)都可以說(shuō)明為內(nèi)聯(lián)函數(shù)。 ? 使用內(nèi)聯(lián)函數(shù),加快了程序執(zhí)行速度,但如果函數(shù)體語(yǔ)句多,則會(huì)增加程序代碼的大小。 ? 使用小的內(nèi)聯(lián)函數(shù)在代碼速度和大小上可以取得折衷 ,其他情況下取決于程序員是追求代碼速度 , 還是追求代碼的規(guī)模 。 ? 由于編譯器必須知道內(nèi)聯(lián)函數(shù)的函數(shù)體 , 才能進(jìn)行內(nèi)聯(lián)替換 , 因此 , 內(nèi)聯(lián)函數(shù)必須在程序中第一次調(diào)用此函數(shù)的語(yǔ)句出現(xiàn)之前被編譯器看見 。 例如 , 上面的程序可采用下述方式 。 include iostream using namespace std。 inline int isnumber(char c) {return ( c = 39。039。 amp。amp。 c = 39。939。 ) ? 1 : 0。} void main( ){// ...} 函數(shù)重載 ? C++允許為同一個(gè)函數(shù)定義幾個(gè)版本,這稱為函數(shù)重載。 ? 函數(shù)重載使一個(gè)函數(shù)名具有多種功能,即具有“ 多種形態(tài) ” ,稱這種形態(tài)為多態(tài)性。 ? 在下面的例子中,為求兩個(gè)數(shù)值中的最大者,設(shè)計(jì)一個(gè)名為 max的函數(shù),并為不同參數(shù)類型各設(shè)計(jì)一個(gè)函數(shù)體。同理,也可用這個(gè)函數(shù)名設(shè)計(jì)一個(gè)具有 3個(gè)整型參數(shù),從而求出 3個(gè)整數(shù)最大值的函數(shù)體。當(dāng)然,也可以為具有 3個(gè)參數(shù)的 max函數(shù)設(shè)計(jì)不同參數(shù)類型的函數(shù)體。 【 例 】 函數(shù)重載產(chǎn)生多態(tài)性的例子。 include iostream using namespace std。 double max(double,double)。 //2個(gè)實(shí)型參數(shù)的函數(shù)原型 int max(int,int)。 //2個(gè)整型參數(shù)的函數(shù)原型 char max(char,char)。 //2個(gè)字符型參數(shù)的函數(shù)原型 int max(int,int,int)。 //3個(gè)整型參數(shù)的函數(shù)原型 void main( ) { coutmax(, ) max(56,8) “ max(39。w39。,39。p39。)endl。 coutmax(5,9,4)=max(5,9,4) max(5,4,9)=max(5,4,9)endl。 } double max(double m1, double m2) { return(m1m2)?m1:m2。} int max(int m1, int m2) {return(m1m2)?m1:m2。} char max(char m1, char m2) {return(m1m2)?m1:m2。} int max(int m1, int m2, int m3) { int t=max(m1,m2)。 return max(t,m3)。 } C++能夠正確調(diào)用相應(yīng)函數(shù) , 程序輸出結(jié)果如下: 56 w max(5,9,4)=9 max(5,4,9)=9 ? 從函數(shù)原型可見,它們的區(qū)別一是參數(shù)類型不同,二是參數(shù)個(gè)數(shù)不同。 ? 這種功能與自然語(yǔ)言中對(duì)動(dòng)詞的使用類似,此時(shí)的動(dòng)詞等價(jià)于 C++的函數(shù),例如一個(gè)對(duì)象在現(xiàn)實(shí)生活中可以對(duì)它進(jìn)行清潔、移動(dòng)、分解、修理或油漆,而且這也只是一部分用法。 ? 這些動(dòng)詞僅僅代表了一般性的動(dòng)作,因?yàn)椴⒉恢绖?dòng)作將發(fā)生在哪些對(duì)象上。例如,盡管移動(dòng)鉛筆和移動(dòng)桌子的概念相似,但它們所需要的操作并不相同。只有知道移動(dòng)動(dòng)作作用的對(duì)象,才能將它與一系列特殊操作聯(lián)系起來(lái)。 ? C++語(yǔ)言也只有向具有多態(tài)性的函數(shù)傳遞一個(gè)實(shí)際對(duì)象時(shí),該函數(shù)才能與多種可能的函數(shù)中的一種聯(lián)系起來(lái)。換句話說(shuō),源代碼本身并不總是能夠說(shuō)明某部分的代碼是怎樣執(zhí)行的。這說(shuō)明 C++的函數(shù)調(diào)用機(jī)制與 ANSI C的不同。 ? C++的多態(tài)性又被直觀地稱為 “ 一個(gè)名字,多個(gè)函數(shù) ” 。源代碼只指明函數(shù)調(diào)用,而不說(shuō)明具體調(diào)用哪個(gè)函數(shù)。編譯器的這種連接方式稱為動(dòng)態(tài)聯(lián)編或遲后聯(lián)編。在動(dòng)態(tài)聯(lián)編中,直到程序運(yùn)行時(shí)才能確定調(diào)用哪個(gè)函數(shù)。 ? 動(dòng)態(tài)聯(lián)編需要虛函數(shù)的支持 , 這將在第 9章介紹 。對(duì) 【 例 】 而言 , 編譯器在編譯
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1