版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、關(guān)于本門(mén)課程,兩大部分:標(biāo)準(zhǔn)c+ int function(); 轉(zhuǎn)化為定義: int x = /*some optional value */; int function() / 代碼 ,3.由C遷移到C+,d. 所有的函數(shù)在調(diào)用前必須先聲明 例 void somefunc(int); int main() somefunc(39); /OK somefunc(A); /OK somefunc(53.76); /warning ,3.由C遷移到C+,e. 空?qǐng)A括號(hào)的含義:C-“將接受一切” C+-“沒(méi)有參數(shù)可傳遞” 例C+ 中:void somefunc(void); void somefu
2、nc(); 二者在編譯器的識(shí)別上是相同的,但后者更佳.如果函數(shù)不接收任何參數(shù),就不需要void。,3.由C遷移到C+,f. 函數(shù)參數(shù)的默認(rèn)值 在C中,沒(méi)有“函數(shù)參數(shù)的默認(rèn)值”的概念。所有的參數(shù)都是強(qiáng)制的,即如果先聲明了3個(gè)參數(shù)的函熟,那么必須使用相應(yīng)類(lèi)型的3個(gè)參數(shù)來(lái)調(diào)用它。 在C+中,可以制定某參數(shù)的默認(rèn)值,或者可以使用另外的值來(lái)取代默認(rèn)值。,3.由C遷移到C+,f. 函數(shù)參數(shù)的默認(rèn)值 C+參數(shù)默認(rèn)值是通過(guò)函數(shù)聲明中來(lái)實(shí)現(xiàn)的。 例 void somefunc(double pi = 3.14159); 當(dāng)函數(shù)聲明中同時(shí)包含強(qiáng)制/默認(rèn)參數(shù)時(shí),前者必須在前。 例 void somefunc1(ch
3、ar, int =0); /OK void somefunc2(int f, double w = 3.145); /OK void somefunc3( char ss=n, char *buf); /error,3.由C遷移到C+,f. 函數(shù)參數(shù)的默認(rèn)值 當(dāng)需要取代參數(shù)的默認(rèn)值時(shí),必須從左到右嚴(yán)格地執(zhí)行。 例 void somefunc(int x =0, double pi = 3.1416); / somefunc(); /OK somefunc(1); /OK somefunc(2,3.14159); /OK,3.由C遷移到C+,g. 知識(shí)點(diǎn):初始化與賦值的區(qū)別 聲明及初始化:組成了
4、聲明對(duì)象的過(guò)程(向編譯器提供一個(gè)有效的名稱(chēng)),然后給其賦一初值。 例 int data = 1; 賦值:是一現(xiàn)有對(duì)象被另一對(duì)象的內(nèi)容取代。 例 data = 2; 區(qū)別:是否有聲明限定符,即類(lèi)型。 C+原則:PITA規(guī)則-聲明及初始化優(yōu)于賦值。,3.由C遷移到C+,h. 放置變量聲明的位置 在C中,創(chuàng)建聲明新變量,必須在通過(guò)輸入一個(gè)“”開(kāi)始進(jìn)行,也就是說(shuō)必須在任何可執(zhí)行的語(yǔ)句之前首先聲明變量。 例 #include void getdata( ) puts(“Enter a value: “); int data; /error in C,but OK in C+ scanf(“%d”, 注:
5、C+允許變量在代碼塊的任何地方聲明。,3.由C遷移到C+,i. for 循環(huán)內(nèi)的變量聲明 C風(fēng)格:先聲明計(jì)數(shù)變量,再在循環(huán)內(nèi)賦值。 C+風(fēng)格:遵循PITA規(guī)則。在循環(huán)內(nèi)聲明并初始化,循環(huán)結(jié)束后,也就超出了其作用域。 例 /C 風(fēng)格 /C+風(fēng)格 int const data = 5; int const data =5; int total =0; int i; int total =0; for (i=0; idata; i+) for(int i=0;idata;+i) total+=i; total+=i;,3.由C遷移到C+,i. for 循環(huán)內(nèi)的變量聲明 C+中當(dāng)計(jì)數(shù)變量在循環(huán)內(nèi)聲明時(shí)
6、,該變量的作用域也限制在這個(gè)循環(huán)之內(nèi)。 例 int const data =5; int total =0; for(int i=0; idata; +i) total+=i; for(int i=0; idata;+i) total-= i;,3.由C遷移到C+,j. 標(biāo)記名成為類(lèi)型名 在C中,創(chuàng)建自定義類(lèi)型(如結(jié)構(gòu)),并進(jìn)一步實(shí)例化,如: struct Person -簡(jiǎn)化:typedef struct char name60); char name60; int age; int age; ; Person; struct Person student; Person student;,
7、3.由C遷移到C+,j. 標(biāo)記名成為類(lèi)型名 在C+中,不需要typedef了。當(dāng)編譯器遇到標(biāo)記名時(shí),會(huì)自動(dòng)將其轉(zhuǎn)化為類(lèi)型名。 例 struct Person char name60; int age; Person student; 注:在C+中,struct、enum 、union或class的標(biāo)記名會(huì)自動(dòng)轉(zhuǎn)換為類(lèi)型名。,3.由C遷移到C+,o. 數(shù)組初始化 在C中,數(shù)組聲明中所有的初始化值都必須讓編譯器知道-即C編譯器在編譯時(shí)需要確定對(duì)應(yīng)常量的地址,那么常量只有存儲(chǔ)在全局內(nèi)存或常量區(qū)。 例 char const *array = “C+”,“C”,”Java”; 此代碼在C/C+中都可以編
8、譯。,3.由C遷移到C+,o. 數(shù)組初始化 另一方面,如果初始化值在堆?;蛘邉?dòng)態(tài)內(nèi)存中時(shí),C就不能夠初始化該數(shù)組,而C+能夠。 例void somefunc() int a = 1, b =2; int array = a, b; /error in C, OK in C+ 注:與C不同,C+不需要在編譯時(shí)就知道數(shù)組的初始化值。,3.由C遷移到C+,p. 布爾類(lèi)型 C中不顯式地包含布爾類(lèi)型及表示false和true的相應(yīng)值。因此,每個(gè)基本類(lèi)型(包括指針)都可隱式地轉(zhuǎn)換為布爾類(lèi)型。 C+引入bool類(lèi)型和相關(guān)字面量false和true.基本類(lèi)型和布爾類(lèi)型間可以相互轉(zhuǎn)換。False為0,true為
9、1。,3.由C遷移到C+,p. 布爾類(lèi)型 例 bool isbig(int x,int y) return xy; / OK in C+ good! bool isbig(int x,int y) return xy ? true: false; / not good in C+,3.由C遷移到C+,q. 關(guān)鍵字const const是由C+創(chuàng)建的關(guān)鍵字,后為ANSIC采用。是用來(lái)承認(rèn)某個(gè)對(duì)象是常量的一個(gè)限定符。 不能對(duì)一個(gè)常量對(duì)象賦值。 所有的常量必須初始化,符合PITA原則。 例 int const x; /error int const y = 1; /OK,3.由C遷移到C+,q. 關(guān)
10、鍵字const 使用const而不是#define 預(yù)處理器不理解語(yǔ)言或作用域規(guī)則,而編譯器理解。在C+定義常量時(shí),編譯器是好的選擇。,3.由C遷移到C+,r. C+新的類(lèi)型強(qiáng)制轉(zhuǎn)換風(fēng)格。 C+不支持C風(fēng)格的隱式轉(zhuǎn)換 例 void somefunc( void const *v) int *prt = (int *)v ; ,3.由C遷移到C+,r. C+新的類(lèi)型強(qiáng)制轉(zhuǎn)換風(fēng)格。 C+中隱式轉(zhuǎn)換使用static_cast,此關(guān)鍵字用來(lái)執(zhí)行在不同的類(lèi)型之間求得等價(jià)值。是安全的類(lèi)型強(qiáng)制轉(zhuǎn)換。 例 double const value = 74.19; int x = value; /may a wa
11、rning int y = static_cast(value); /OK 注:C+是一種類(lèi)型安全的語(yǔ)言,盡量不用類(lèi)型強(qiáng)制轉(zhuǎn)換。,4.關(guān)于C/C+程序內(nèi)存,A。預(yù)備知識(shí)點(diǎn):什么是堆棧? 兩層含義:作為數(shù)據(jù)結(jié)構(gòu)的堆棧。是一種線性數(shù)據(jù)結(jié)構(gòu),但堆是順序隨意的,對(duì)堆中元素處理時(shí),可以是任何位置,優(yōu)先隊(duì)列;棧插入、刪除操作是固定在一端進(jìn)行的,這一端稱(chēng)為棧頂(top),另一端稱(chēng)為棧底(bottom),向棧中插入數(shù)據(jù)的操作稱(chēng)為壓入(Push),從棧中刪除數(shù)據(jù)稱(chēng)為彈出 。先進(jìn)后出。 作為操作系統(tǒng)方面的堆棧,是與程序運(yùn)行和內(nèi)存調(diào)度息息相關(guān)的。,4.關(guān)于C/C+程序內(nèi)存,B。C/C+程序的內(nèi)存分配 一個(gè)由c/C+
12、編譯的程序占用的內(nèi)存分為以下幾個(gè)部分 1、棧區(qū)(stack) 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類(lèi)似于數(shù)據(jù)結(jié)構(gòu)中的棧。 2、堆區(qū)(heap) 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類(lèi)似于鏈表。 。,3、全局區(qū)(靜態(tài)區(qū))(static)全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 - 程序結(jié)束后由系統(tǒng)釋放 4、文字常量區(qū) 常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放 5、程序代碼區(qū)存放函數(shù)體的二進(jìn)制
13、代碼,4.關(guān)于C/C+程序內(nèi)存,C.例 /main.cpp int a = 0; 全局初始化區(qū) char *p1; 全局未初始化區(qū) main() int b; 棧 char s = abc; 棧 char *p2; 棧 char *p3 = 123456; 1234560在常量區(qū),p3在棧上。,static int c =0; 全局(靜態(tài))初始化區(qū) p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配而來(lái)得10和20字節(jié)的區(qū)域就在堆區(qū)。 strcpy(p1, 123456); 1234560放在常量區(qū),編譯器可能會(huì)將它與p3所指向的12345
14、6優(yōu)化成一個(gè)地方。 ,4.關(guān)于C/C+程序內(nèi)存,D.堆與棧的理論知識(shí): 申請(qǐng)方式 stack: 棧由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開(kāi)辟空間 heap: 堆,需要程序員自己申請(qǐng),并指明大小,,在c中malloc函數(shù) 如p1 = (char *)malloc(10); 在C+中用new運(yùn)算符 如p2 = new char10; 但是注意p1、p2本身是在棧中的。,4.關(guān)于C/C+程序內(nèi)存,D.堆與棧的理論知識(shí): 申請(qǐng)后系統(tǒng)的響應(yīng) 棧:只要棧的剩余空間大于所申請(qǐng)空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提示棧溢出。 堆:首先應(yīng)該知道操作系統(tǒng)有一個(gè)記錄空
15、閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請(qǐng)時(shí),,會(huì)遍歷該鏈表,尋找第一個(gè)空間大于所申請(qǐng)空間的堆結(jié)點(diǎn),然后將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除,并將該結(jié)點(diǎn)的空間分配給程序,另外,對(duì)于大多數(shù)系統(tǒng),會(huì)在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語(yǔ)句才能正確的釋放本內(nèi)存空間。另外,由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的大小,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中 -動(dòng)態(tài)內(nèi)存分配,4.關(guān)于C/C+程序內(nèi)存,D.堆與棧的理論知識(shí): 申請(qǐng)大小的限制 棧:一塊連續(xù)的內(nèi)存的區(qū)域。棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,如果申請(qǐng)的空間超過(guò)棧的剩余空間時(shí),將提示overflow。因此,能從棧獲得的空間較小。,堆:堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來(lái)存儲(chǔ)的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。由此可見(jiàn),堆獲得的空間比較靈活,也比較大。,4.關(guān)于C/C+程序內(nèi)存,D.堆與棧的理論知識(shí): 申請(qǐng)效率的比較: 棧由系統(tǒng)自動(dòng)分配,速度較快。但程序員是無(wú)法控制的。 堆是由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過(guò)用起來(lái)最方便.,4.關(guān)于C/C+程序內(nèi)存,D.堆與棧的理論知識(shí): 堆和棧中的存儲(chǔ)內(nèi)容 棧: 在函數(shù)調(diào)用時(shí),第一個(gè)進(jìn)棧的是主函數(shù)中函數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水利工程施工合同管理方案
- 施工現(xiàn)場(chǎng)環(huán)保措施實(shí)施方案
- 工地材料管理數(shù)字化轉(zhuǎn)型方案
- 結(jié)構(gòu)工程抗震驗(yàn)收方案
- 施工現(xiàn)場(chǎng)風(fēng)險(xiǎn)應(yīng)急響應(yīng)方案
- 施工現(xiàn)場(chǎng)噪聲控制計(jì)劃方案
- 供電系統(tǒng)故障排查方案
- 質(zhì)量管理培訓(xùn)與實(shí)操手冊(cè)
- 礦山安全管理制度與操作指南
- 2025危險(xiǎn)品培訓(xùn)試卷及答案
- 白內(nèi)障疾病教學(xué)案例分析
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 2026年黃委會(huì)事業(yè)單位考試真題
- 供水管網(wǎng)及配套設(shè)施改造工程可行性研究報(bào)告
- 2026年及未來(lái)5年中國(guó)高帶寬存儲(chǔ)器(HBM)行業(yè)市場(chǎng)調(diào)查研究及投資前景展望報(bào)告
- 英語(yǔ)試卷浙江杭州市學(xué)軍中學(xué)2026年1月首考適應(yīng)性考試(12.29-12.30)
- 生產(chǎn)車(chē)間停線制度
- 關(guān)于生產(chǎn)部管理制度
- CMA質(zhì)量手冊(cè)(2025版)-符合27025、評(píng)審準(zhǔn)則
- (一模)2026年沈陽(yáng)市高三年級(jí)教學(xué)質(zhì)量監(jiān)測(cè)(一)生物試卷(含答案)
- 2025年和田地區(qū)公務(wù)員錄用考試《公安專(zhuān)業(yè)科目》真題
評(píng)論
0/150
提交評(píng)論