C++程序設(shè)計(jì)2(C++新特性1)_第1頁
C++程序設(shè)計(jì)2(C++新特性1)_第2頁
C++程序設(shè)計(jì)2(C++新特性1)_第3頁
C++程序設(shè)計(jì)2(C++新特性1)_第4頁
C++程序設(shè)計(jì)2(C++新特性1)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1 第二講C 語言的新特性 1 張仕 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院E mail shi 2 教學(xué)提綱 一 教學(xué)內(nèi)容 VC 6 0開發(fā)環(huán)境的使用 C 語言的新特性 與C語言不同的部分 二 學(xué)時 兩課時三 教學(xué)目的和要求了解VC 6 0開發(fā)環(huán)境的基本使用方法掌握C 語言與C不同的一些新特性四 教學(xué)重點(diǎn)和難點(diǎn)重點(diǎn) 函數(shù)重載難點(diǎn) 函數(shù)重載 3 五 教學(xué)過程提要 演示安裝VS6 0和MSDN VC 6 0開發(fā)環(huán)境的初步使用簡單C 控制臺程序的編譯 調(diào)試和運(yùn)行C 的關(guān)鍵字const修飾符內(nèi)聯(lián)函數(shù)帶缺省參數(shù)的函數(shù)函數(shù)重載 4 C 語言的一些新特性 單行注釋和新的I O流const修飾符內(nèi)聯(lián)函數(shù)函數(shù)原型帶缺省參數(shù)的函數(shù)函數(shù)模板函數(shù)名重載new和delete運(yùn)算符引用 reference 5 2 1VC 的開發(fā)環(huán)境 2 1 1VC 簡介VisualStudio6 0的一部分 VC 集編輯 編譯 連接 調(diào)試等于一體 給編程人員提供了一個完整而又方便的開發(fā)界面和許多有效的輔助開發(fā)工具 2 1 2VC 開發(fā)環(huán)境的使用這部分的內(nèi)容參考教材第一章 6 example2 1 在屏幕上顯示星號的三角形陣列 include 預(yù)處理voidDoDraw intnum voidmain 主函數(shù) intnum 5 DoDraw num 例2 1 簡單的C 程序 2 2C 程序結(jié)構(gòu) 7 注 cout為輸出流 類似C語言的printf endl表示換行 使用IO流應(yīng)包括頭文件iostream h如果要使用C的函數(shù)printf 必須在程序前面加上 include才可以將函數(shù)printf的原型聲明包含進(jìn)來 voidDoDraw intnum for inti 0 i num i for intj 0 j i j cout cout endl 例2 1 8 C程序與C 程序比較 include stdio h main chara b c inti 10 a B b O c Y putchar a putchar b putchar c printf i s i include iostream h voidmain chara b c a B b O c Y cout a b c endl inti 10 變量聲明不必放在開始位置cout i i 9 例2 2 example2 2 include 預(yù)處理classtest 定義類testpublic 定義類的公共部分test inty x y voidprint cout x endl private 定義類的私有部分intx voidmain 主函數(shù) testob 5 定義具體的對象ob print 消息激活服務(wù)print 結(jié)果 顯示x的值5 10 演示例題1 2在VC 中的調(diào)試 運(yùn)行和排錯 11 2 3 1C和C 都有的關(guān)鍵字 常用 int float char struct union const static long short unsigned signed void enum extern double typedef for if else while do switch case default break continue return 問題 能否用關(guān)鍵字作標(biāo)識符 答案 不能 為什么 2 3C 關(guān)鍵字 12 2 3 2C 特有的關(guān)鍵字 常用 class定義類 public private protected定義公共 私有 保護(hù)屬性和服務(wù) friend定義友元 operator定義運(yùn)算符 inline定義內(nèi)聯(lián)函數(shù) virtual定義虛函數(shù) template定義模板 new delete分配和消除存儲空間this指向自己的指針 13 2 4const存取修飾符 在C中 可以使用 define來定義符號常量 defineBUFSIZE100C 中建議使用一種更靈活 更安全的方式來定義常量 即使用關(guān)鍵字const來定義常量 constintbufsize 100 14 2 4 1常量例子 constdoublePI 3 1415926 PI是一個常量constintv 1 2 3 4 數(shù)組元素v i 是常量constintx error noinitialize 定義常量時應(yīng)初始化 否則出錯 voidfun1 v 2 error 例2 3 example2 3 15 include 預(yù)處理 defineCP3 0intmain intargc char argv inti 10 doublex if i 10 x i CP cout i i endl return0 16 2 4 2常量const和指針 1 指針?biāo)赶虻膶ο鬄槌A縋ointertoconst 2 指針本身為常量constpointer 17 指向常量的指針Pointertoconst constint u pointertoconstantconstintp 10 u error cannotconvertfrom constint to int 18 常指針constpointer 固定指向一個變量 intd 1 e 2 int constw error wisconst 19 2 4 3const修飾函數(shù)參數(shù) 函數(shù)的形參也可以聲明為常量 const可以阻止參數(shù)被函數(shù)修改 例如 strcmp函數(shù)的原型聲明為 intstrcmp constchar constchar 作用 將參數(shù)聲明為常量 使在函數(shù)的調(diào)用過程中 參數(shù)不被改變 在軟件的實(shí)際開發(fā)中很有用 20 常量類型在其作用域內(nèi)不能改變 這在大型軟件開發(fā)中很重要 為什么 1 防止在函數(shù)體內(nèi)改變參數(shù)的值2 減小程序出錯的可能性3 提高程序的可維護(hù)性 21 例 intcmp constint p constint q p 20 errorreturn p q p q 22 2 5內(nèi)聯(lián)函數(shù) inlinefunction 在函數(shù)聲明或定義的前面加上關(guān)鍵字 inline 該函數(shù)就被聲明為內(nèi)聯(lián)函數(shù) inlineintmax intx inty max被說明為內(nèi)聯(lián)函數(shù) intz if x y z x elsez y return z 23 當(dāng)程序編譯時 對內(nèi)聯(lián)函數(shù)在其調(diào)用處進(jìn)行內(nèi)置替換 將內(nèi)聯(lián)函數(shù)的代碼插入在調(diào)用處 從而消除執(zhí)行過程中的函數(shù)調(diào)用開銷 內(nèi)聯(lián)函數(shù)通常用于小而常用的函數(shù) 它與帶參數(shù)的宏替換相似 但其處理方法不同 宏替換由預(yù)處理程序進(jìn)行簡單的字符串替換 在替換過程中不進(jìn)行語法的檢查 而內(nèi)聯(lián)函數(shù)由C 編譯器進(jìn)行處理 在插入代碼之前即進(jìn)行語法檢查 2 5 1內(nèi)聯(lián)函數(shù)的原理 24 一般情況下 只有較短的函數(shù)才定義為內(nèi)嵌函數(shù) 使用內(nèi)嵌函數(shù)實(shí)際上是一種增加空間開銷以減小時間開銷的方法 注意 在C 中 需要定義的內(nèi)聯(lián)函數(shù)不能含有循環(huán) switch和復(fù)雜嵌套的if語句 遞歸函數(shù)是不能被用來做內(nèi)聯(lián)函數(shù)的 25 2 5 2函數(shù)調(diào)用時的時間開銷 1 函數(shù)調(diào)用時的時間開銷 保護(hù)現(xiàn)場 恢復(fù)現(xiàn)場 2 用關(guān)鍵字inline說明內(nèi)嵌函數(shù) 編譯器直接用內(nèi)嵌函數(shù)體的編譯代碼插入在函數(shù)調(diào)用語句處 這一過程稱為函數(shù)的嵌入擴(kuò)展 利用內(nèi)嵌函數(shù)減少了調(diào)用普通函數(shù)時的壓棧和彈棧操作 從而提高程序的運(yùn)行速度 26 2 5 3為什么使用內(nèi)聯(lián)函數(shù) Efficiency效率在C程序中 可使用宏macros達(dá)到同樣的目的 但是宏是通過預(yù)處理來處理的 不進(jìn)行類型檢查 容易造成難以發(fā)現(xiàn)的錯誤 宏macros在類的內(nèi)部不能使用 宏不能作為類的成員 27 為什么使用內(nèi)聯(lián)函數(shù) cont 為了克服宏的上述缺陷 C 引入了內(nèi)聯(lián)函數(shù) 內(nèi)聯(lián)函數(shù)具有高效率 而且 進(jìn)行類型檢查 避免出現(xiàn)類型不匹配的錯誤 可以作為類的成員函數(shù) Toretaintheefficiencyofthepreprocessormacro buttoaddthesafetyandclassscopingoftruefunctions C hastheinlinefunction 28 2 5 5Howdoinlinefunctionswork編譯器處理內(nèi)聯(lián)函數(shù)的過程 類型檢查Typechecking Toassuresafety 將函數(shù)代碼插入到函數(shù)調(diào)用處thensubstitutesthefunctionbodyforthefunctioncall這樣函數(shù)代碼將占據(jù)更所得存儲空間TheinlinecodedoesoccupyspaceTheshort smallandfrequentlycalledfunctionsaresuitableforinlinefunctions 29 在C 語言中 函數(shù)參數(shù)允許使用缺省值 當(dāng)函數(shù)調(diào)用時 若給出的參數(shù)個數(shù)少于函數(shù)表中參數(shù)的總數(shù)時 則所缺參數(shù)自動取函數(shù)參數(shù)表中設(shè)置的缺省值 下面是一個參數(shù)缺省的例子 voidf intx inty 10 此處省略函數(shù)體內(nèi)容 2 6缺省參數(shù) 30 該程序定義了一個函數(shù)f 它有兩個整形參數(shù) 第二個參數(shù)缺省值為10 如調(diào)用語句 f 2 就相當(dāng)于f 2 10 函數(shù)可以有多個缺省參數(shù) 但應(yīng)注意只能從右往左缺省 例如 intf1 intx inty 0 intz 0 正確intf2 intx inty 0 intz 錯誤當(dāng)函數(shù)既有聲明又有定義 不能在函數(shù)定義中指定默認(rèn)參數(shù) 31 例 voiddelay intloop 1000 voiddelay intloop 32 2 7函數(shù)重載 兩或兩個以上的函數(shù)共享同一個名稱 就稱為函數(shù)名重載 OverloadedFunctionsMultiplefunctionscanhavethesamenamewithdifferentimplementations 函數(shù)重載簡化了函數(shù)調(diào)用工作 33 例子 例如 在C語言的數(shù)學(xué)函數(shù)庫中 求絕對值的函數(shù)有abs fabs等 分別用于不同類型的參數(shù) 而在C 中 對相同功能但參數(shù)類型不同的函數(shù)可以使用相同的函數(shù)名 在調(diào)用時無需記憶多個函數(shù)名 而由編譯器根據(jù)參數(shù)類型選擇 34 例2 4 求兩個數(shù)中最大值的函數(shù)max 不管其參數(shù)的整數(shù)類型 實(shí)數(shù)類型 字符串 都可以使用同名函數(shù)來實(shí)現(xiàn) 調(diào)用時只需使用max就可以了 編譯器將根據(jù)實(shí)參的類型判斷應(yīng)該調(diào)用哪一個函數(shù) intmax inta intb if a b returna elsereturnb 35 floatmax floata floatb if a b returna elsereturnb char max char a char b if strcmp a b 0

溫馨提示

  • 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

提交評論