標(biāo)準(zhǔn)C++編程常量_指針_new__函數(shù).doc_第1頁
標(biāo)準(zhǔn)C++編程常量_指針_new__函數(shù).doc_第2頁
標(biāo)準(zhǔn)C++編程常量_指針_new__函數(shù).doc_第3頁
標(biāo)準(zhǔn)C++編程常量_指針_new__函數(shù).doc_第4頁
標(biāo)準(zhǔn)C++編程常量_指針_new__函數(shù).doc_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

const double *p; double *const p1; const double *const p2;有什么區(qū)別? const double *p; /*p是個(gè)const,意思是不能通過*p修改p指向的對(duì)象比如 double a=0.0; const double *p=&a; 那么*p=2.0是非法的 而如果有const double a=0.0;那么必須是 const double* 才可以指向a ,像double*p =&a;是非法的double *const p1; /p1是個(gè)const, p1的值不能改變,所以必須在定義p1的時(shí)候就初始化它:double *const p1=&某; 如果再有p1= 某地址; /這個(gè)就行不通const double *const p2; /p2是個(gè)const,*p2也是const ,就是p2 的值不能改變,也不能通過*p2改變p2所指向的對(duì)象的值一道C語言的例題:在C語言的編譯下,由于指針指向的地址,直接向地址修改值,導(dǎo)致值被修改。然而這段程序,在不修改程序代碼的情況下,使用C+進(jìn)行編譯,由于C+的編譯器做了大量的優(yōu)化工作,而直接導(dǎo)致值為100. 優(yōu)化工作為程序看到n的前面使用const做修飾,直接認(rèn)為n為常量,在接下來使用n的地方,直接使用這個(gè)值代替,而不直接再從內(nèi)存中n的地址處再取一遍n的值,所以我們看到的就是100.那么我們要怎么樣才能使n的值從地址處再取一遍呢?volatile的作用: 作為指令關(guān)鍵字,確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值. 一個(gè)定義為volatile的變量是說這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。上面的例題只是想說明C+會(huì)對(duì)常量進(jìn)行優(yōu)化,直接使用值進(jìn)行代替,而不再去內(nèi)存中取變量值。強(qiáng)制類型轉(zhuǎn)換在C語言中強(qiáng)制類型轉(zhuǎn)換很常見,但是在C+中強(qiáng)制類型轉(zhuǎn)換卻是很少見的,甚至很反感的。C+認(rèn)為強(qiáng)制類型轉(zhuǎn)換應(yīng)該出現(xiàn)在底層的代碼中,而不應(yīng)該出現(xiàn)在軟件開發(fā)中。C+認(rèn)為在軟件開發(fā)中不應(yīng)該出現(xiàn)強(qiáng)制類型轉(zhuǎn)換的,至少不應(yīng)該胡亂出現(xiàn)。C+提倡不要進(jìn)行類型轉(zhuǎn)換,直接設(shè)置正確的類型。在C+中進(jìn)行強(qiáng)制類型轉(zhuǎn)換可以使用以下四個(gè)函數(shù)實(shí)現(xiàn)。Static_cast用來進(jìn)行數(shù)值類型之間的轉(zhuǎn)換,或者有一方是void*指針類型之間的轉(zhuǎn)換。該運(yùn)算符把expression轉(zhuǎn)換為type-id類型,但沒有運(yùn)行時(shí)類型檢查來保證轉(zhuǎn)換的安全性。static_cast ( expression )Const_cast用于臨時(shí)去掉const或volatile限制,就是臨時(shí)將常量轉(zhuǎn)換成變量。就是在這個(gè)語句內(nèi)時(shí)const限制被去掉了,跳出這個(gè)語句,const限制仍然存在。用法:const_cast (expression)該運(yùn)算符用來修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。一、常量指針被轉(zhuǎn)化成非常量的指針,并且仍然指向原來的對(duì)象;二、常量引用被轉(zhuǎn)換成非常量的引用,并且仍然指向原來的對(duì)象;reinterpret_cast用于任意兩種指針類型之間的轉(zhuǎn)換或者是指針類型與數(shù)值類型之間的轉(zhuǎn)換。(最危險(xiǎn)的轉(zhuǎn)換,一般不使用)einterpret_cast (expression)type-id 必須是一個(gè)指針、引用、算術(shù)類型、函數(shù)指針或者成員指針。它可以把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù),也可以把一個(gè)整數(shù)轉(zhuǎn)換成一個(gè)指針(先把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù),在把該整數(shù)轉(zhuǎn)換成原類型的指針,還可以得到原先的指針值)。Dynamic_cast 用于賦值類之間的轉(zhuǎn)換dynamic_cast (expression)該運(yùn)算符把expression轉(zhuǎn)換成type-id類型的對(duì)象。Type-id必須是類的指針、類的引用或者void*;如果type-id是類指針類型,那么expression也必須是一個(gè)指針,如果type-id是一個(gè)引用,那么expression也必須是一個(gè)引用。dynamic_cast運(yùn)算符可以在執(zhí)行期決定真正的類型。如果downcast是安全的(也就說,如果基類指針或者引用確實(shí)指向一個(gè)派生類對(duì)象)這個(gè)運(yùn)算符會(huì)傳回適當(dāng)轉(zhuǎn)型過的指針。如果downcast不安全,這個(gè)運(yùn)算符會(huì)傳回空指針(也就是說,基類指針或者引用沒有指向一個(gè)派生類對(duì)象)。dynamic_cast主要用于類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換,還可以用于類之間的交叉轉(zhuǎn)換。在類層次間進(jìn)行上行轉(zhuǎn)換時(shí),dynamic_cast和static_cast的效果是一樣的;在進(jìn)行下行轉(zhuǎn)換時(shí),dynamic_cast具有類型檢查的功能,比static_cast更安全。C+的頭文件實(shí)在C語言的頭文件基礎(chǔ)上去掉.h并在頭文件名開始出加上一個(gè)c即可。所以不能這么寫。邏輯運(yùn)算符and_eq、or_eq、xor_eq是關(guān)鍵字,在有一些電腦中沒有運(yùn)算符下,可以使用這些關(guān)鍵字代替。在為函數(shù)取名時(shí)不要使用這些關(guān)鍵字(注意點(diǎn))。New和deletenew 類型 (類型*)malloc(sizeof(類型)這兩種函數(shù)都是申請(qǐng)空間。new是C+中的,而malloc則是在C語言中的。這兩個(gè)函數(shù)是等效的。New還可以用來初始化剛開辟的空間Int* r=new int(100);/開辟一個(gè)存放整數(shù)的空間,并指定該整數(shù)的初值為100,返回一個(gè)指向該存儲(chǔ)空間的地址放入r中。new char10;/開辟一個(gè)存放字符數(shù)組(包括10個(gè)元素)的空間,返回首元素的地址C+告訴我們?cè)诨厥沼?new 分配的單個(gè)對(duì)象的內(nèi)存空間的時(shí)候用 delete,回收用 new 分配的一組對(duì)象的內(nèi)存空間的時(shí)候用 delete。我們一般在delete以后,將該釋放指針設(shè)置為NULL,應(yīng)為delete以后,該指針變?yōu)榱藨铱罩羔槪兊貌话踩?,將其變?yōu)榭罩羔槙?huì)安全一些。注意:不是用new申請(qǐng)的空間就不要去使用delete。用c的malloc來申請(qǐng)的空間要用free來釋放。必須配對(duì)才可以。注意:頭文件 string.h cstring string 區(qū)別1) 文件cstring,和string.h對(duì)應(yīng),c+版本的頭文件,包含比如strcpy之類的字符串處理函數(shù)2)文件string.h,和cstring對(duì)應(yīng),c版本的頭文件,包含比如strcpy之類的字符串處理函數(shù)3)文件string,包含std:string的定義,屬于STL范疇string.h是C語言中字符串操作函數(shù)的頭文件cstring是c+對(duì)C語言中的strcpy之類的函數(shù)申明,包含cstring之后,就可以在程序中使用C語言風(fēng)格的strcpy之類的函數(shù)。string是c+語言中string類模板的申明注意:在沒有使用new進(jìn)行初始化的情況下,我們不能保證其值為0.語句coutflush; 有什么功能?cout是輸出語句,flush是緩沖區(qū)的內(nèi)容,coutflush表示將緩沖區(qū)的內(nèi)容馬上送進(jìn)cout,把輸出緩沖區(qū)刷新。NothrowNothrow是在當(dāng)n的值即申請(qǐng)空間過大,超過其范圍時(shí),為了以防由于申請(qǐng)空間過大而導(dǎo)致的系統(tǒng)崩潰。加上nothrow會(huì)使即使n的值過大超過其申請(qǐng)空間的范圍也不會(huì)產(chǎn)生系統(tǒng)奔潰。在內(nèi)存不足時(shí),new (std:nothrow)并不拋出異常,而是將指針置NULL。標(biāo)準(zhǔn)的new頭文件可以定義普通的new,同時(shí),它也可以定義一個(gè)變體new操作符,這個(gè)操作符叫做nothrownew。普通的new:過去和現(xiàn)在 普通new一個(gè)異常的類型std:bad_alloc。這個(gè)是標(biāo)準(zhǔn)適應(yīng)性態(tài)。在早期C+的舞臺(tái)上,這個(gè)性態(tài)和現(xiàn)在的非常不同;new將返回0來指出一個(gè)失敗,和malloc()非常相似。 在一定的環(huán)境下,返回一個(gè)NULL指針來表示一個(gè)失敗依然是一個(gè)不錯(cuò)的選擇。C+標(biāo)準(zhǔn)委員會(huì)意識(shí)到這個(gè)問題,所以他們決定定義一個(gè)特別的new操作符版本,這個(gè)版本返回0表示失敗。使用時(shí)需要添加頭文件#include.指針在c+中,函數(shù)地址和成員地址用來輸出時(shí)都會(huì)賦予true。函數(shù)地址只能用來調(diào)用函數(shù),不能用來做其他事情。成員地址則只能用來訪問成員。一、 成員指針成員指針是C+中用于對(duì)類中成員進(jìn)行操作。成員指針的定義格式:成員類型 類名:*指針名=&類名:成員名;成員函數(shù)指針的定義格式: 成員函數(shù)返回類型 類名:*指針名 = &類名:成員函數(shù)名(參數(shù)表)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論