版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+基礎(chǔ),第一章,C+參考書(shū),C+程序設(shè)計(jì) .錢(qián)能 .清華大學(xué)出版社 C+程序設(shè)計(jì)的配套習(xí)題和解答 .錢(qián)能 . 清華大學(xué)出版社 C+ Primer (第三版 ) 作者:Stanley B.Lippman,Jose LaJoie,Barbara E.Moo 出版社:Addison Wesley/Pearson,本章目標(biāo),C+ 與 C C+的優(yōu)點(diǎn) C+中的數(shù)據(jù)類(lèi)型 引用類(lèi)型 函數(shù)重載、參數(shù)默認(rèn)值 C+中的動(dòng)態(tài)內(nèi)存分配,C+與C的關(guān)系和區(qū)別,在C語(yǔ)言中引入了面向?qū)ο蟮乃枷?是一種混合型的語(yǔ)言,同時(shí)支持結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)方法 兼容C語(yǔ)言,可不加修改地使用C語(yǔ)言代碼 允許數(shù)據(jù)抽象,支持封裝
2、、繼承和多態(tài)等特征,C+的優(yōu)點(diǎn),C+適用的應(yīng)用程序范圍極廣 C+可以用于硬件級(jí)別的編程 C+從C中繼承了過(guò)程化編程的高效性,并集成了面向?qū)ο缶幊谭绞降墓δ?C+在其標(biāo)準(zhǔn)庫(kù)中提供了大量的功能 有許多商業(yè)C+庫(kù)支持?jǐn)?shù)量眾多的操作系統(tǒng)環(huán)境和專(zhuān)門(mén)的應(yīng)用程序 C+具有良好的性能(算法效率與機(jī)器代碼效率) 錯(cuò)誤處理機(jī)制 更好的使用COM(ActiveX)與DCOM,C+標(biāo)準(zhǔn)庫(kù) 2-1,直接使用標(biāo)準(zhǔn)C中所有庫(kù),如以下是常用的標(biāo)準(zhǔn)C函數(shù)庫(kù)頭文件: stdio.h stdlib.h string.h ctype.h,C+標(biāo)準(zhǔn)庫(kù) 2-2,C+編譯器都提供有完整的標(biāo)準(zhǔn)庫(kù) C+標(biāo)準(zhǔn)庫(kù)中的幾乎所有內(nèi)容都是在命名空間st
3、d中定義的 使用C+標(biāo)準(zhǔn)庫(kù)將獲得非常多的功能,關(guān)鍵字,關(guān)鍵字是系統(tǒng)已經(jīng)預(yù)定義的單詞,有專(zhuān)用的定義。這些關(guān)鍵詞都是保留字,用戶(hù)不可再重新定義。 C+區(qū)分大小寫(xiě),關(guān)鍵字全部由小寫(xiě)字母組成。標(biāo)準(zhǔn)C+(ISO14882)定義了74個(gè)關(guān)鍵字,具體的C+編譯器還會(huì)做一些增刪 bool wchar_t class friend private protected public asm explicit namespace operator template this typename using virtual throw try delete false new true const_cast dynam
4、ic_cast reinterpret_cast static_cast export mutable typeid,數(shù)據(jù)類(lèi)型分類(lèi),C+中數(shù)據(jù)有常量和變量之分,它們分別屬于以下這 些類(lèi)型,數(shù)據(jù)類(lèi)型概述,基本數(shù)據(jù)類(lèi)型有4種:整型(int)、實(shí)型 (float、double)、字符型(char)、邏輯型(bool) 空類(lèi)型void:用于顯示說(shuō)明一個(gè)函數(shù)不返回任何值 構(gòu)造類(lèi)型又稱(chēng)為組合類(lèi)型:是由基本類(lèi)型按照某種規(guī)則組合而成的 指針類(lèi)型:變量用于存儲(chǔ)另一變量的地址,而不能用來(lái)存放基本類(lèi)型的數(shù)據(jù) 類(lèi)類(lèi)型:是體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的最基本特征,也是體現(xiàn)C+與C最大的不同之處,bool類(lèi)型,邏輯型也稱(chēng)布爾型,
5、其取值為true(邏輯真)和false(邏輯假),存儲(chǔ)字節(jié)數(shù)在不同編譯系統(tǒng)中可能有所不同,VC+6.0中為1個(gè)字節(jié)。 聲明方式:bool result; result=true; 可以當(dāng)作整數(shù)用(true一般為1,false為0) 把其它類(lèi)型的值轉(zhuǎn)換為布爾值時(shí),非零值轉(zhuǎn)換為true,零值轉(zhuǎn)換為false,常量說(shuō)明符const,用const給字面常量起個(gè)名字(標(biāo)識(shí)符),這個(gè)標(biāo)識(shí)符就稱(chēng)為標(biāo)識(shí)符常量;因?yàn)闃?biāo)識(shí)符常量的聲明和使用形式很像變量,所以也稱(chēng)常變量; 定義的一般形式: const 數(shù)據(jù)類(lèi)型 常量名=常量值; 數(shù)據(jù)類(lèi)型 const 常量名=常量值; 例如: const float PI=3.14
6、159f; const int Number_of_Student=100; 注意事項(xiàng): 常變量必須也只能在聲明時(shí)進(jìn)行初始化; 常變量初始化之后,不允許再被賦值; 常變量必須先說(shuō)明后使用; 常變量存儲(chǔ)在數(shù)據(jù)區(qū),并且可以按地址訪問(wèn),編譯時(shí)系統(tǒng)對(duì)常變量進(jìn)行類(lèi)型檢查。 C+建議使用常變量,而不要使用#define符號(hào)常量。,結(jié)構(gòu)體位段,C+定義結(jié)構(gòu)體中,可以為其成員定義時(shí)指定所占的位數(shù)(1個(gè)字節(jié)為8個(gè)位),struct Date int year:20; int month:6; int day:6; ;,C+中的結(jié)構(gòu)體支持類(lèi)的所有特性 內(nèi)存對(duì)齊,強(qiáng)制類(lèi)型轉(zhuǎn)換,強(qiáng)制類(lèi)型轉(zhuǎn)換格式如下: type(表達(dá)
7、式),例如:int(num); (type)表達(dá)式,例如:(int)num; 作用:將表達(dá)式強(qiáng)制轉(zhuǎn)換為type類(lèi)型,但表達(dá)式的值及其類(lèi)型不變 新增的強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符: 格式:static_cast(表達(dá)式) 例如:double root=3.14; int value=static_cast(root);,域運(yùn)算符,C+中增加的作用域標(biāo)識(shí)符 : 用于對(duì)與局部變量同名的全局變量進(jìn)行訪問(wèn) 用于表示類(lèi)的成員,這將在關(guān)于類(lèi)的一節(jié)中詳細(xì)說(shuō)明,#include int var=1; main() int var=0; printf(var=%dn,var);/局部變量 var=:var;/引用全局變量
8、printf(after var=:var %d,var); ,動(dòng)態(tài)分配內(nèi)存,靜態(tài)分配內(nèi)存:在編譯時(shí)確定了固定的內(nèi)存地址與內(nèi)存大小,如:函數(shù)里的局部變量、全局變量等 動(dòng)態(tài)分配內(nèi)存:由程序控制,運(yùn)行時(shí)主動(dòng)性的向系統(tǒng)申請(qǐng)所需大小的內(nèi)存段,并且每次分配到的內(nèi)存地址不固定 C+ 可以使用malloc、realloc、calloc和free函數(shù)實(shí)現(xiàn),也可以使用運(yùn)算符new和delete實(shí)現(xiàn),new運(yùn)算符,new 運(yùn)算符 可以用于創(chuàng)建堆空間 成功返回首地址,失敗返回NULL 語(yǔ)法: 指針變量=new 數(shù)據(jù)類(lèi)型; 指針變量=new 數(shù)據(jù)類(lèi)型長(zhǎng)度; 例如: int *p; p=new int; char *p
9、Str=new char50;,delete運(yùn)算符,delete運(yùn)算符 可以用于釋放堆空間 語(yǔ)法: delete 指針變量; delete 指針變量; 例如: delete p; delete pStr;,動(dòng)態(tài)分配內(nèi)存示例2-1,#include #include int main() int * a; int i, num; printf(Please enter the number of integers: ); scanf(%d,num); a = new int num;,動(dòng)態(tài)分配內(nèi)存示例2-2,if (a = NULL) printf( malloc error! exit.n )
10、; return 1; for ( i = 0; i num; i + ) scanf(%d, ,函數(shù)重載3-1,C+允許用相同的函數(shù)名來(lái)定義一組功能相同或類(lèi)似的函數(shù),程序的可讀性增強(qiáng) 函數(shù)重載又稱(chēng)為函數(shù)的多態(tài)性 函數(shù)重載不同形式: 形參數(shù)量不同 形參類(lèi)型不同 形參的順序不同 形參數(shù)量和形參類(lèi)型都不同 調(diào)用重載函數(shù)時(shí),編譯器通過(guò)檢查實(shí)際參數(shù)的個(gè)數(shù)、類(lèi)型和順序來(lái)確定相應(yīng)的被調(diào)用函數(shù),函數(shù)重載3-2,合法的重載例子: int abs(int i); long abs(long l); double abs(double d); 非法的重載例子: int abs(int i); long abs(i
11、nt i); void abs(int i); /如果返回類(lèi)型不同而函數(shù)名相同、形參也相同,則是不合法的,編譯器會(huì)報(bào)語(yǔ)法錯(cuò)誤。,函數(shù)重載3-3,#include int max(int x, int y); double max(double x, double y); void main() int a=10, b=20 ,c; double x=200.3, y=400.6, z; c = max(a,b); z = max(x,y); printf(%4d%5.1fn,c,z); ,int max(int x, int y) printf(int functionn); if(xy) r
12、eturn x; else return y; double max(double x, double y) printf(double functionn); if(xy) return x; else return y; ,帶默認(rèn)形參值的函數(shù)3-1,函數(shù)聲明或者定義的時(shí)候,可以給形參賦一些默認(rèn)值 調(diào)用函數(shù)時(shí),若沒(méi)有給出實(shí)參,則按指定的默認(rèn)值進(jìn)行工作,帶默認(rèn)形參值的函數(shù)3-2,函數(shù)沒(méi)有聲明時(shí),在函數(shù)定義中指定形參的默認(rèn)值 函數(shù)既有定義又有聲明時(shí),聲明時(shí)指定后,定義后就不能再指定默認(rèn)值 默認(rèn)值的定義必須遵守從右到左的順序,如果某個(gè)形參沒(méi)有默認(rèn)值,則它左邊的參數(shù)就不能有默認(rèn)值。 void fun
13、c1(int a, double b=4.5, int c=3); /合法 void func1(int a=1, double b, int c=3); /不合法 函數(shù)調(diào)用時(shí),實(shí)參與形參按從左到右的順序進(jìn)行匹配,帶默認(rèn)形參值的函數(shù)3-3,#include double power(double x=10.0, int n=2); void main() printf(power(3,5)=%dn,power(3, 5); printf(power(3)=%dn,power(3); printf(power()=%dn,power(); double power(double x, int n
14、) int i; double s=1.0; for(i=1; i=n; i+) s *= x; return s; ,帶默認(rèn)形參值的函數(shù)的二義性,重載的函數(shù)中如果形參帶有默認(rèn)值時(shí),可能產(chǎn)生二義性,#include int add(int x=5, int y=6); float add(int x=5, float y=10.0); void main() int a; float b; a= add(10,20); b= add(10); printf(a= %dn , a); printf(b= %dn,b); ,int add(int x, int y) return x+y; flo
15、at add(int x, float y) return x+y; ,b=add(10)語(yǔ)句產(chǎn)生二義性性,可以認(rèn)為該語(yǔ)句是調(diào)用第一個(gè)函數(shù),也 可以是第二個(gè),因此編譯器不能確定調(diào)用的是哪一個(gè)函數(shù)。,內(nèi)聯(lián)函數(shù)2-1,當(dāng)程序執(zhí)行函數(shù)調(diào)用時(shí),系統(tǒng)要建立??臻g,保護(hù)現(xiàn)場(chǎng),傳遞參數(shù)以及控制程序執(zhí)行的轉(zhuǎn)移等等,這些工作需要系統(tǒng)時(shí)間和空間的開(kāi)銷(xiāo)。有些情況下,函數(shù)本身功能簡(jiǎn)單,代碼很短,但使用頻率卻很高,程序頻繁調(diào)用該函數(shù)所花費(fèi)的時(shí)間卻很多,從而使得程序執(zhí)行效率降低。 為了提高效率,一個(gè)解決辦法就是不使用函數(shù),直接將函數(shù)的代碼嵌入到程序中。但這個(gè)辦法也有缺點(diǎn),一是相同代碼重復(fù)書(shū)寫(xiě),二是程序可讀性往往沒(méi)有使用函
16、數(shù)的好。 為了協(xié)調(diào)好效率和可讀性之間的矛盾,C+提供了另一種方法,即定義內(nèi)聯(lián)函數(shù),方法是在定義函數(shù)時(shí)用修飾詞inline。,內(nèi)聯(lián)函數(shù)2-2,/讀入一行字符串,逐個(gè)判斷是否為數(shù)字字符: # include inline IsNumber(char ch) return ch=0 /因使用頻度很高,說(shuō)明為內(nèi)聯(lián)函數(shù)。,帶參數(shù)的宏定義,定義的一般形式: #define (參數(shù)表) 例如:#define ADD(x,y) (x)+(y) /如果程序中有如下語(yǔ)句 s=ADD(7,8); /則被替換為s=(7)+(8); 注意: 應(yīng)寫(xiě)在一行上, 若不能寫(xiě)在一行,用續(xù)行符“” 宏名與左括號(hào)間不能有空格 宏體中
17、盡量給參數(shù)加括號(hào),可以避免替換后在優(yōu)先級(jí)上發(fā)生問(wèn)題,帶參數(shù)的宏和內(nèi)聯(lián)函數(shù)的區(qū)別,兩者的定義形式不一樣。宏定義中只給出形式參數(shù),而不指明每一個(gè)形式參數(shù)的類(lèi)型;而在函數(shù)定義中,必須指定每一個(gè)形式參數(shù)的類(lèi)型。 函數(shù)調(diào)用是在程序運(yùn)行時(shí)進(jìn)行的,分配臨時(shí)的內(nèi)存單元;而宏替換則是在編譯前進(jìn)行的,并不分配內(nèi)存單元,不進(jìn)行值得傳遞處理。 函數(shù)調(diào)用時(shí),要求實(shí)參和形參的類(lèi)型一致;而宏調(diào)用時(shí)只用實(shí)參簡(jiǎn)單地替換形參。 使用宏次數(shù)多時(shí),宏展開(kāi)后源程序會(huì)變長(zhǎng),因?yàn)槊恳淮魏暾归_(kāi)都會(huì)使源程序增長(zhǎng);而函數(shù)調(diào)用不使源程序變長(zhǎng)。 同樣由于宏只做簡(jiǎn)單的文本替換,并不進(jìn)行參數(shù)類(lèi)型檢查,在C+中建議采用inline函數(shù)來(lái)替換帶參數(shù)的宏。,引用類(lèi)型,引用是一種特殊的變量,可以認(rèn)為是一個(gè)變量的別名 定義引用的一般格式: 類(lèi)型說(shuō)明符 / b是a的別名,因此a和b是同一個(gè)單元 注意:定義引用時(shí)一定要初始化,指明該引用變量是誰(shuí)的別名 對(duì)數(shù)組只能引用數(shù)組元素,不能引用數(shù)組(數(shù)組名本身為地址)。 不能定義引用的引用(引用也是地址),所以當(dāng)函數(shù)的參數(shù)為引用時(shí),引用不能作實(shí)參。,按引用傳遞3-1,引用傳遞方式是在函數(shù)定義時(shí)在形參前面加上引用運(yùn)算
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 調(diào)酒沙龍活動(dòng)方案策劃(3篇)
- 水下拆除施工方案(3篇)
- 手繪驚喜活動(dòng)策劃方案(3篇)
- 保暖大棚施工方案(3篇)
- 浴室擴(kuò)建施工方案(3篇)
- 化工車(chē)間培訓(xùn)資料
- 城市酒店員工培訓(xùn)
- 2025年大學(xué)舞蹈(舞蹈心理學(xué))試題及答案
- 2025年大學(xué)會(huì)計(jì)學(xué)(財(cái)務(wù)會(huì)計(jì)基礎(chǔ))試題及答案
- 2025年高職作物生產(chǎn)與經(jīng)營(yíng)管理(農(nóng)業(yè)項(xiàng)目管理)試題及答案
- (2025年)昆山杜克大學(xué)ai面試真題附答案
- 污水處理設(shè)施運(yùn)維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 高級(jí)衛(wèi)生專(zhuān)業(yè)技術(shù)資格考試臨床醫(yī)學(xué)檢驗(yàn)臨床微生物(042)(副高級(jí))試題及解答參考(2025年)
- 四川省南充市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試題含解析
- JGJ100-2015車(chē)庫(kù)建筑設(shè)計(jì)規(guī)范
- 2024屆高考語(yǔ)文復(fù)習(xí):二元思辨類(lèi)作文
- DB11T 696-2023 預(yù)拌砂漿應(yīng)用技術(shù)規(guī)程
- (完整word版)英語(yǔ)四級(jí)單詞大全
- 井下作業(yè)技術(shù)油水井措施酸化課件解析
- 旅游接待業(yè) 習(xí)題及答案匯總 重大 第1-10章 題庫(kù)
- 智慧金庫(kù)項(xiàng)目需求書(shū)
評(píng)論
0/150
提交評(píng)論