天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

C++沉思錄學(xué)習(xí)筆記

發(fā)布時(shí)間:2016-11-28 16:03

  本文關(guān)鍵詞:C++沉思錄,由筆耕文化傳播整理發(fā)布。


<C++沉思錄>學(xué)習(xí)筆記

第一篇  動機(jī)
  講述C++什麼地方吸引了作者,和作者為什麼要在編程中使用C++。
  一開始,作者就提出了C++本質(zhì)——抽象和封裝:類。 抽象可以幫助設(shè)計(jì)者可以有所側(cè)重,C++使我們更容易把程序看作抽象的集合,同時(shí)也隱藏了那些用戶無須關(guān)心的抽象工作細(xì)節(jié)。封裝則是C++可以把問題精心劃分為分割良好的模塊,使得模塊與模塊之間的信息得到很好的隱藏。模塊化不完全同于C中也能實(shí)現(xiàn)模塊化的函數(shù),書中Page4上小題“不用類來實(shí)現(xiàn)”中已經(jīng)闡述了這個(gè)觀點(diǎn)——C中函數(shù)模塊化也是有效的,但是與C++類有3個(gè)明顯的缺點(diǎn):①C中函數(shù)不是內(nèi)聯(lián)的,因此即使當(dāng)跟蹤關(guān)閉的時(shí)候,它還能保持函數(shù)調(diào)用的開銷(“效率”是使C++經(jīng)久不衰的最主要原因之一);②C中函數(shù)引入了很多全局函數(shù)名,而C++引入一個(gè)類名即可;③C++類可以使該類具有一般性,C++中有重載和覆蓋,C中則必須為每種情況都提供一個(gè)函數(shù)(C不支持重載,所以參數(shù)不同導(dǎo)致)。C++使問題模塊化,然后會給代碼復(fù)用、軟件開發(fā)和維護(hù)等帶來很大便利。
  作者在解釋“為什麼用C++工作” 中,提到了編程語言的規(guī)范(L注:這一點(diǎn)我一直很看重,因?yàn)樵谲浖_發(fā)的過程中,大部分時(shí)候是和同事一起完成,按照已有的編程語言規(guī)范可以使你工作很愉快,可以幫助你把精力大部分放在軟件的算法和架構(gòu)上去),其中說道很多后來的編程語言中使用的內(nèi)存管理——垃圾回收機(jī)制,但垃圾回收要求系統(tǒng)在運(yùn)行速度、編譯器、運(yùn)行時(shí)系統(tǒng)復(fù)雜度等方面付出代價(jià)。但C++采用構(gòu)造函數(shù)和析構(gòu)函數(shù)解決內(nèi)存使用問題,不過這給程序員了一定壓力。說實(shí)話,我覺得垃圾回收機(jī)制就是對析構(gòu)函數(shù)的進(jìn)一步封裝(僅是個(gè)人理解),但是這要求程序設(shè)計(jì)者對程序整個(gè)運(yùn)行狀況都必須了解,即就是所謂的“庖丁解牛”!
  另外,文中例舉到①成功使用動態(tài)內(nèi)存的必須操作知道要分配多大的內(nèi)存;不使用超出分配的內(nèi)存范圍外的內(nèi)存;不再需要時(shí)釋放內(nèi)存;只有不再使用時(shí),才釋放內(nèi)存;只釋放分配的內(nèi)存;切記檢查每個(gè)分配請求,以確保成功。 ②編程環(huán)境你把自己的程序交給編譯器編譯,編譯器把相應(yīng)的機(jī)器代碼放入一個(gè)文件,連接程序讀取這個(gè)文件,把這些機(jī)器指令和相關(guān)庫中的機(jī)器指令結(jié)合起來,放入另一個(gè)文件,得到執(zhí)行這個(gè)文件的命令后,操作系統(tǒng)把文件讀入內(nèi)存,并且跳到文件的第一條指令。

第二篇  類和繼承
   這一篇沒怎么看懂,對于我來說很抽象!我還是記錄一下幾個(gè)知識點(diǎn):代理類、句柄、虛函數(shù)、SmartPointer(智能指針)、CopyOnWrite(寫時(shí)復(fù)制)、(純)虛函數(shù)。第十一章(什麼時(shí)候不應(yīng)當(dāng)使用虛函數(shù))我覺得有意思,因?yàn)閷ο笤谡{(diào)用虛函數(shù)的時(shí)候容易混淆,畢竟C++的多態(tài)就是靠這個(gè)。虛函數(shù)的詳細(xì)解釋參考:C++虛函數(shù)表解析(轉(zhuǎn))  和 虛繼承與虛函數(shù)表,下面給出書中一個(gè)例子:

View Code

g();
};

Base b;
Derived d;

Base * bp = &b;
Base * bq = &d;
Derived * dp = &d;

bp->f(); bp->g();
bq->f(); bq->g();
dp->g(); dp->f();

  你會發(fā)現(xiàn)只有指針的靜態(tài)類型與它所指向的實(shí)際對象的類型不同時(shí),非虛函數(shù)f和虛函數(shù)g運(yùn)行起來才會有所差別。另外書中一個(gè)例子:

View Code

Base* bp;
Derived* dp;
bp = delete dp; // 這里虛析構(gòu)函數(shù)可要可不要

  這里一個(gè)基類指針來刪除一個(gè)派生類對象,Base必須有一個(gè)虛析構(gòu)函數(shù)。這里我是這樣子理解的,,派生類Derived繼承自基類Base,由于Base沒有析構(gòu)函數(shù)(不考慮默認(rèn)的),所以Derived也不會有(因?yàn)樽约阂矝]添加),應(yīng)該想到基類和派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)執(zhí)行順序:基類構(gòu)造函數(shù)→派生類構(gòu)造函數(shù)→派生類析構(gòu)函數(shù)→基類析構(gòu)函數(shù)。上例中派生類沒有析構(gòu)函數(shù),所以按照上訴執(zhí)行過程,最后基類必須要有析構(gòu)函數(shù),否則對象資源不能很好的釋放。

第三篇  模版
  感覺這一張就是介紹STL的!!!幸好之前對STL有一點(diǎn)的了解,要不然這一篇也是看不懂的。
  里面提到一個(gè)之前沒有注意的知識點(diǎn):在使用數(shù)組的時(shí)候,下標(biāo)和指針均可以訪問數(shù)組,但是這兩者的區(qū)別? 最簡單的答案:下標(biāo)容易理解,而指針效率更高。更深層次的回答:在下標(biāo)中,下標(biāo)值本身就有意義,而與它是否用于下標(biāo)無關(guān);在指針中,要訪問容器的元素沒有必要知道容器的標(biāo)識(因?yàn)橹羔樉桶怂斜匾男畔? 。簡單地說,就是程序只要擁有一個(gè)指向數(shù)組元素的指針就可以訪問整個(gè)數(shù)組,而通過下標(biāo)進(jìn)行元素訪問的程序就要另外知道正在使用的是哪一個(gè)數(shù)組。不過需要注意:“幾個(gè)數(shù)組的對應(yīng)元素”的概念在使用下標(biāo)實(shí)現(xiàn)的時(shí)候遠(yuǎn)比使用指針更簡單,釋放數(shù)組時(shí)(可結(jié)合數(shù)組的聲明周期到了???),會不通知指針的所有者,一次性使所有指向數(shù)組元素的指針失效,而下標(biāo)則仍然保有其意義。
  在P145中注釋中提高一個(gè):內(nèi)建數(shù)組既不能被復(fù)制也不能賦值。 你可以將內(nèi)建數(shù)組傳遞給一個(gè)函數(shù),不過這不是數(shù)組復(fù)制,而是將該數(shù)組轉(zhuǎn)化成一個(gè)指向數(shù)組元素首地址的指針,然后將這個(gè)指針傳遞給函數(shù)。這點(diǎn)可以認(rèn)真思考思考!
  指針和整數(shù)相減或相加都會得到一個(gè)新的指針。 
  在第十六章“作為接口的模版” 舉的一個(gè)例子,然后以此改進(jìn),這個(gè)過程值得學(xué)習(xí)。
  第十八章里提到“反轉(zhuǎn)鏈表” ,作者列出了具體代碼(那種方法是我之前沒有遇見的)。
  第二十章“函數(shù)對象” 也是不錯(cuò),不能動態(tài)的創(chuàng)建函數(shù),不過我覺得沒在這個(gè)必要吧。

第四篇  庫
  這一篇看著頭疼。!
  內(nèi)建類型和內(nèi)置類型有什麼聯(lián)系和區(qū)別? 

posted on


  本文關(guān)鍵詞:C++沉思錄,由筆耕文化傳播整理發(fā)布。



本文編號:197091

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/197091.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶d895c***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請E-mail郵箱bigeng88@qq.com