標(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ù)免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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

提交評論