c++學(xué)習(xí)要點(diǎn)+各章要點(diǎn)導(dǎo)讀+課文精講串講文字材料_第1頁
c++學(xué)習(xí)要點(diǎn)+各章要點(diǎn)導(dǎo)讀+課文精講串講文字材料_第2頁
c++學(xué)習(xí)要點(diǎn)+各章要點(diǎn)導(dǎo)讀+課文精講串講文字材料_第3頁
c++學(xué)習(xí)要點(diǎn)+各章要點(diǎn)導(dǎo)讀+課文精講串講文字材料_第4頁
c++學(xué)習(xí)要點(diǎn)+各章要點(diǎn)導(dǎo)讀+課文精講串講文字材料_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、c+學(xué)習(xí)要點(diǎn)1.傳指針時(shí),我們可以通過指針來修改它在外部所指向的內(nèi)容。但如果要修改外部指針?biāo)赶虻膶ο笫遣豢赡艿摹@鐐鬟f外部指針到函數(shù)內(nèi)來分配空間,必須傳遞指針的指針或指針的引用。2.charcarry10=0;編譯器會(huì)將其后所有的東西都置0;3.函數(shù)返回值為const時(shí),返回的東西付給一個(gè)類型相同的標(biāo)示后其不能為左值;4.constint*i;intconst*i;int*consti;前兩個(gè)功能相同,說明i所指向的內(nèi)容不變;最后一個(gè)說明指針指向的地址不變,但內(nèi)容可變。5.類中的const成員函數(shù)。定義為在原型后加const。常量函數(shù)不能修改類中的任何屬性。但有兩種方法可以修改。a)(my

2、class*)this-member1=values;b)將一個(gè)成員定義成mutable即可被常量函數(shù)修改。6.類中的常量const類型的,不能在類中被用來定義數(shù)組。而enumone=100;two=2;定義的one、two卻可以。通常的enum定義的置分配問題:enumal=9,z;此時(shí)z的值為10。7.用const定義的int可用來開辟數(shù)組,但const定義的常量數(shù)組中的元素,不能用來定義數(shù)組。8.用sizeof計(jì)算變量的空間,如果是數(shù)組,按實(shí)際空間返回;常量字符串(實(shí)際上是在靜態(tài)內(nèi)存區(qū)開辟的變量)sizeof返回比實(shí)際長度加一。如果是指針則不考慮它指向的空間大小,僅僅返回指針類型的大小。

3、如果用sizeof計(jì)算函數(shù)的行參,即使是屬組也僅僅返回一個(gè)相關(guān)類型指針的大小。9.形如intiarray=12,124,433;編譯器會(huì)自動(dòng)給iarray分配3個(gè)元素的長度。元素長度的個(gè)數(shù)計(jì)算公式為sizeof(iarray)/sizeof(*iarray)。10.拷貝構(gòu)造函數(shù):當(dāng)行參和實(shí)參結(jié)合時(shí),如果是復(fù)雜對象的傳值類型,則調(diào)用拷貝構(gòu)造函數(shù)生成一個(gè)臨時(shí)對象作為實(shí)參,退出函數(shù)時(shí),臨時(shí)對象被調(diào)用析構(gòu)函數(shù)釋放。當(dāng)返回值是復(fù)雜對象是,也是調(diào)用拷貝構(gòu)造函數(shù)來賦值。這就出現(xiàn)構(gòu)造函數(shù)和析構(gòu)函數(shù)被調(diào)用次數(shù)不相等的情況。拷貝構(gòu)造函數(shù)的原型為a(a&),我們可在類中重載。(缺省的拷貝構(gòu)造函數(shù)是使用位(bit)拷

4、貝方法:淺層拷貝,不拷貝指針指向的內(nèi)容)。11.volatile類型的變量告訴編譯器,本變量不需要進(jìn)行代碼優(yōu)化。在多線程的應(yīng)用中,我們?nèi)绻x入一個(gè)變量到寄存器,此時(shí)時(shí)間片到期,去處理其他線程了,在重新獲得處理機(jī)時(shí),volatile類型告訴處理機(jī),重新從變量讀取數(shù)據(jù)到寄存器,而不是用寄存器數(shù)據(jù)直接處理,這樣可以防止臟數(shù)據(jù)。12.class和struct在一定程度上有相同的功能,只不過前者缺省的成員是私有的,后者在缺省時(shí)成員為共有的。故而class不是c+必需的保留字13.c和c+編譯器,對相同的函數(shù)名編譯后生成的相同的標(biāo)示不同,故而在引用c的庫文件時(shí)必須使用extern“c”告訴編譯器,它是c的

5、函數(shù),按c的規(guī)則編譯。通常我們使用的標(biāo)準(zhǔn)頭文件已被處理過。14.#include“filename”;#include,前者先在當(dāng)前目錄下尋找文件,如果找不到再到系統(tǒng)規(guī)定的路徑下找,后者直接到系統(tǒng)規(guī)定的路徑下找。15.任何地方分配的靜態(tài)變量(static),其生命周期和主進(jìn)程相同。第二次定義一個(gè)已存在的static變量,對變量的內(nèi)用無影響,但它的可見范圍只在定義的范圍內(nèi)。(考研曾作錯(cuò)!)(從靜態(tài)變量的特性不難理解,類中的static類型是所有對象共享的)16.內(nèi)聯(lián)函數(shù)(inline)在實(shí)現(xiàn)上實(shí)際和宏類似,在內(nèi)聯(lián)函數(shù)出現(xiàn)的地方將函數(shù)展開來避免函數(shù)調(diào)用時(shí)的出棧、如棧,提高效率。但內(nèi)聯(lián)函數(shù)的代價(jià)是:

6、代碼增大。inline函數(shù)適合成員函數(shù)和自由函數(shù)。在類中實(shí)現(xiàn)的函數(shù)自動(dòng)為內(nèi)聯(lián)函數(shù)。inline必須定義到函數(shù)的實(shí)現(xiàn)上,例如:inline intplusone(int)是無效的。友元函數(shù)在類的體內(nèi)被實(shí)現(xiàn)自動(dòng)變?yōu)閮?nèi)聯(lián)函數(shù)。17.#include #definedebug(x)cout#x=xendl 其中的#x表示x被當(dāng)作字符串輸出。18.assert(0!=0); 如果assert中的條件為假,則運(yùn)行期間回退出程序,且報(bào)告出錯(cuò)代碼的行號(hào)。(#include )19.靜態(tài)對象在main結(jié)束或exit()被調(diào)用時(shí)才調(diào)用自身的析構(gòu)函數(shù)。這意味著,在對象的析構(gòu)函數(shù)中調(diào)用exit()是很危險(xiǎn)的,有可能進(jìn)

7、入一個(gè)死循環(huán)中。調(diào)用abort()來退出函數(shù),靜態(tài)對象的析構(gòu)函數(shù)并不會(huì)被調(diào)用。我們可以用atexit()來指定跳出main或調(diào)用exit時(shí)要執(zhí)行的操作,用atexit注冊的函數(shù),可以在所有對象的析構(gòu)函數(shù)之前調(diào)用。voidexit_fn2(void)printf(exitfunction#2calledn);/處理函數(shù)atexit(exit_fn2);20.全局變量實(shí)際上用的是靜態(tài)存儲(chǔ)。靜態(tài)變量的構(gòu)造是在進(jìn)入main之前調(diào)用的,在main結(jié)束時(shí)調(diào)用它的析構(gòu)函數(shù)。變量的名字由小范圍(c+而言):/*.cppinta;/靜態(tài)變量,但為externinta;即它是全局的,外部可見的staticintb

8、;/靜態(tài)變量,static和extern相反,只在*.cpp中有效,對其他單元(文件)是不可見的。函數(shù)的定義和上面相同。main()類的靜態(tài)成員變量可以如下賦值:intx:s=23;(在*.cpp中,無論公私都可以)21.名字空間(namespace):定義一個(gè)名字空間,然后使用unsing就可以將當(dāng)前的類型上下文轉(zhuǎn)換名字空間所定地的.namespacemathenumsignpositive,negative;classintegerinti;signs;public:interger(inti=0):i(i)signsign().;/endclassintergera,b,c;interg

9、erdivide(interger,interger);/no;voidq()usingnamespacemath;intergera;/hidesmath:aa.sign(negative);math:a.sign(positive);22.一般對于函數(shù)flaotf(inta,intb); 某些c+編譯器編譯后生成_f_int_int的名字,有些c編譯器則生成_f的名字。故在c+中鏈接c的庫函數(shù)時(shí)要用extern“c”告訴編譯器,按c的規(guī)則來編譯函數(shù)。類似的還有extern“c”#include “myhead.h”,c+還支持extern“c+”.23.在函數(shù)調(diào)用時(shí),傳引用也是將指針壓棧。

10、24.構(gòu)造函數(shù)、析構(gòu)函數(shù)、賦值構(gòu)造函數(shù)、重載的=,四者的調(diào)用順序:(三種函數(shù)都已實(shí)現(xiàn))a)xx;xa=x;result:x:constructx:copy_structb)xx;xa;a=x;result:x:constructx:constructx:copy_struoperator=x:destruct如果沒有賦值構(gòu)造函數(shù)則結(jié)果:x:constructx:constructoperator=x:destruct(如果直接xa=x;這不掉用一般的構(gòu)造函數(shù),調(diào)用復(fù)制構(gòu)造函數(shù))指向類的成員函數(shù)的指針:設(shè)intx:a(void)xx;int(x:*pf)(void)=&x:a;(x.*pf)()

11、;指向成員變量的指針:設(shè)inti;是x的成員變量intx:*pm=&x:i;xx; 各章要點(diǎn)導(dǎo)讀第 1 章 緒論本章作為全書的開篇,旨在使讀者初步了解面向?qū)ο蟮某绦蛟O(shè)計(jì)語言之由來,初步了解面向?qū)ο蟮某绦蛟O(shè)計(jì)思想之基本特點(diǎn),概要性地了解面向?qū)ο蟮能浖_發(fā)方法,為后續(xù)章節(jié)的學(xué)習(xí)奠定基礎(chǔ)。為什么需要首先有一個(gè)初步和概要性的了解呢?一方面,這是為了在以后的學(xué)習(xí)中具體接觸到每一個(gè)新的概念、語法時(shí)都能夠清楚地認(rèn)識(shí)到,它在面向?qū)ο蟮姆椒ㄖ?、在c+語言中的地位和作用是什么。另一方面,是希望讀者在一開始就能夠認(rèn)識(shí)到,面向?qū)ο蟮乃枷肱c人類所習(xí)慣的思維方式是一致的,雖然c+語言比起面向過程的語言(如c語言)來要復(fù)雜

12、許多,但是c+設(shè)計(jì)者的目的是為了使事情變得更簡單,而不是故弄玄虛將事情搞得更復(fù)雜。事實(shí)上,正是由于c+語法的復(fù)雜性,使得它的表現(xiàn)能力更強(qiáng),程序員用c+來寫程序的時(shí)候能夠更容易、更靈活地實(shí)現(xiàn)各種功能。讀者在閱讀本章1.1-1.3時(shí)會(huì)感覺很多問題理解不透,這是正常的。因?yàn)樾枰獙W(xué)完本教材的全部內(nèi)容,才能對c+語言和面向?qū)ο蟮姆椒ㄓ幸粋€(gè)全面的認(rèn)識(shí)。而本章在一開始就給出了一個(gè)全面介紹,雖然盡量使用通俗的語言,但是肯定仍有一些問題是讀者先現(xiàn)在不能完全理解的。對此讀者不必深究,對1.1-1.3的內(nèi)容閱讀后有個(gè)大致的了解就行。1.4節(jié)介紹了信息的表示與存儲(chǔ),這是程序設(shè)計(jì)的基本知識(shí),是必須掌握的基礎(chǔ)。建議讀者認(rèn)

13、真學(xué)習(xí)、完全掌握。不過有些讀者可能會(huì)覺得這些知識(shí)在編程中并沒有直接使用,不學(xué)這一節(jié)好像也不影響學(xué)習(xí)編程。但是沒有這些基礎(chǔ)知識(shí),會(huì)影響你對程序理解。當(dāng)然,如果覺得枯燥,也可以先略過這一節(jié),待以后遇到疑問時(shí),再來學(xué)習(xí)。因此有的教師在講課時(shí)也略過這一節(jié),留給學(xué)生自學(xué),我本人就是這樣做的。1.5節(jié)簡單介紹了程序的開發(fā)過程和一些術(shù)語,不必死記硬背,最好結(jié)合實(shí)驗(yàn)來體會(huì)。本章的主要實(shí)驗(yàn)任務(wù)是學(xué)會(huì)使用一種c+開發(fā)工具,本書的實(shí)驗(yàn)用的是vc+6.0開發(fā)環(huán)境。認(rèn)真完成這一實(shí)驗(yàn)很重要,了解開發(fā)環(huán)境的基本功能,使完成以后各章實(shí)驗(yàn)的基礎(chǔ)。第 2 章 c+簡單程序設(shè)計(jì)本章內(nèi)容是程序設(shè)計(jì)的基礎(chǔ),學(xué)習(xí)的目標(biāo)是掌握c+語言的基

14、本概念和基本語句,能夠編寫簡單的程序段。這是初學(xué)程序設(shè)計(jì)者遇到的第一個(gè)難點(diǎn):將解決問題的步驟用c+語言描述清楚。理解本章的簡單例題不難,但是自己編寫第一個(gè)程序卻有點(diǎn)難以下手。學(xué)習(xí)編寫程序可以從修改例題程序開始,也就是在原有例題程序的基礎(chǔ)上,嘗試自己增加或改變一些功能,或者用不同的方法來解決問題。如果你使用vc+開發(fā)環(huán)境編譯、運(yùn)行簡單程序還有困難,應(yīng)該首先復(fù)習(xí)一下實(shí)驗(yàn)一。本章的例題都是一些比較簡單的問題,但是這些簡單的例題給出了一些常見問題的典型解決方法,既是做軟件開發(fā)必須掌握的基本功也是各種考試中經(jīng)常出現(xiàn)的題目,讀者應(yīng)該達(dá)到熟練掌握,并能夠舉一反三。例如:例2-3是典型的比較問題,例2-4是情

15、況分支,例2-5是累加問題,也可以用for語句實(shí)現(xiàn),要注意累加和的初始值一般是0,例2-10是簡單的統(tǒng)計(jì)問題。當(dāng)你開始改編例題程序時(shí),首先遇到的阻力就是編譯時(shí)和運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤。如果程序中存在語法錯(cuò)誤,編譯時(shí)編譯器就會(huì)指出錯(cuò)誤的位置和錯(cuò)誤原因(請參考實(shí)驗(yàn)二)。不過遺憾的是,編譯器給出的信息常常不是很精確,而且多數(shù)編譯器給出的錯(cuò)誤信息是英文的,這就給初學(xué)者帶來一定的困難。有時(shí)候編譯一個(gè)十幾行的小程序,就會(huì)出現(xiàn)幾十個(gè)語法錯(cuò)誤,這時(shí)不必感到茫然,只要仔細(xì)查看程序,參照編譯器給出的錯(cuò)誤信息一一改正就行了(有時(shí)候改正了一個(gè)錯(cuò)誤,另外幾十個(gè)錯(cuò)誤也就迎刃而解了)。如果看不懂編譯器給出的錯(cuò)誤信息,可以借助于編

16、譯器的幫助功能,當(dāng)然一開始還經(jīng)常需要借助于英文字典。建議讀者準(zhǔn)備一個(gè)筆記本,記下遇到的每一條錯(cuò)誤信息、中文意思、導(dǎo)致這一錯(cuò)誤的真正原因、解決方法。這樣做一開始似乎很麻煩,但是經(jīng)過一段時(shí)間,你會(huì)感到受益匪淺。一旦你熟悉了一種編譯器給出的錯(cuò)誤信息,當(dāng)你再換用別的編譯器時(shí)會(huì)發(fā)現(xiàn)他們對錯(cuò)誤的描述都是類似的,你很快就可以適應(yīng)。這個(gè)辦法是我上大學(xué)時(shí)我的老師教我的,我自己覺得很有效,我做老師以后,也這樣告訴學(xué)生,但愿意這樣做的學(xué)生很少,大家都嫌麻煩。結(jié)果呢,隨著學(xué)習(xí)的深入,作業(yè)越來越難、程序越來越大,也就有越來越多的學(xué)生抱怨實(shí)驗(yàn)課時(shí)間不夠用。究其原因,很大程度上是因?yàn)椴皇煜ゅe(cuò)誤信息,改正語法錯(cuò)誤花了太多時(shí)間

17、。改正語法錯(cuò)誤的能力是編程的基本功,也是相對比較簡單的事情(畢竟編譯器會(huì)直接指出錯(cuò)誤)。較難以發(fā)現(xiàn)和改正的錯(cuò)誤,是運(yùn)行時(shí)的錯(cuò)誤。也就是說,編譯時(shí)沒有語法錯(cuò)誤,但是運(yùn)行的結(jié)果卻不對,這往往是因?yàn)槟愕乃惴ǎň褪墙鉀Q問題的方法)設(shè)計(jì)有問題。這樣的錯(cuò)誤是比較難以定位和改正的,查找這種錯(cuò)誤的位置和原因叫做“程序調(diào)試”,調(diào)試程序的能力和經(jīng)驗(yàn)需要在長期的編程實(shí)踐中積累,大多數(shù)編譯器都提供了輔助調(diào)試的功能(debug),實(shí)驗(yàn)二將引導(dǎo)你學(xué)會(huì)使用vc+6.0的debug功能。第 3 章 函數(shù)本章的主要目標(biāo)是學(xué)會(huì)將一段功能相對獨(dú)立的程序?qū)懗梢粋€(gè)函數(shù),為下一章學(xué)習(xí)類和對象打好必要的基礎(chǔ)。掌握函數(shù)定義和調(diào)用的語法形式并

18、不難,但是要有效地應(yīng)用函數(shù),必須對函數(shù)調(diào)用的執(zhí)行過程和參數(shù)的傳遞有深刻的認(rèn)識(shí),這也正是初學(xué)時(shí)的難點(diǎn)。要很好地理解函數(shù)的調(diào)用和參數(shù)傳遞,尤其是嵌套調(diào)用和遞歸調(diào)用的執(zhí)行過程,比較有效方法是利用編譯器的調(diào)試功能,跟蹤函數(shù)調(diào)用的執(zhí)行過程、觀察參數(shù)和變量的值,實(shí)驗(yàn)三會(huì)引導(dǎo)你進(jìn)行跟蹤和觀察。利用引用傳遞參數(shù),是函數(shù)間數(shù)據(jù)共享的一個(gè)重要方法,但是一部分讀者對引用類型的理解會(huì)有困難,其實(shí)只要簡單地將引用理解為一個(gè)別名就可以了。在介紹函數(shù)的同時(shí),本章也介紹了一些有用的算法。例3-6介紹了產(chǎn)生隨機(jī)數(shù)序列的方法,例3-8、3-9、3-10介紹了遞歸算法。本章的例題程序與第2章相比顯然復(fù)雜了一些,需要仔細(xì)閱讀并上機(jī)調(diào)

19、試才能完全理解。對于較復(fù)雜的程序,書中都以注釋的形式給出了詳細(xì)說明,請讀者在閱讀程序的時(shí)候務(wù)必認(rèn)真閱讀注釋文字。遞歸算法是一種非常簡潔高效的算法,用途很廣泛,但理解起來有一定的難度,自己編寫遞歸程序更不是件容易的事。作為初學(xué)者,對此不必著急。學(xué)習(xí)是一個(gè)循序漸進(jìn)的過程,本章介紹遞歸算法主要是為了說明c+語言允許函數(shù)的遞歸調(diào)用,如果要完全理解和熟練編寫遞歸程序,還需要學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”課程,一般的“數(shù)據(jù)結(jié)構(gòu)”書中都會(huì)詳細(xì)介紹遞歸算法及其應(yīng)用。當(dāng)然,喜歡鉆研的讀者不妨準(zhǔn)備一張大紙,在利用調(diào)試功能跟蹤遞歸程序的執(zhí)行過程時(shí),記錄下遞歸過程中各個(gè)變量的值,會(huì)有助于對遞歸算法的理解。第 4 章 類與對象前面介

20、紹的只是一般程序設(shè)計(jì)的基礎(chǔ)知識(shí),從本章開始才真正接觸到面向?qū)ο蟮某绦蛟O(shè)計(jì)。類是面向?qū)ο蟪绦蛟O(shè)計(jì)中最重要、最基本的概念,也是學(xué)習(xí)面向?qū)ο蠓椒〞r(shí)遇到的第一個(gè)難點(diǎn)。類是對邏輯上相關(guān)的函數(shù)與數(shù)據(jù)的封裝,是對問題的抽象描述。要理解類與對象必須結(jié)合實(shí)例來學(xué)習(xí),讀者一邊讀書可以一邊思考:除了書中列出的例子,現(xiàn)實(shí)世界中還有哪些有形或無形的事務(wù)可以被抽象為程序中的類,每個(gè)類又存在哪些對象(實(shí)體)。這樣對類的概念就會(huì)理解得快一些。在學(xué)習(xí)類成員的訪問控制、構(gòu)造函數(shù)、析構(gòu)函數(shù)時(shí),讀者自然會(huì)有這樣的疑問:這些語法有什么用呢?難道寫個(gè)小程序也必須搞得這么麻煩嗎?應(yīng)該說c+是適合寫大型程序的,c+語言的設(shè)計(jì)師bjarne

21、stroustup在c+語言的設(shè)計(jì)和演化一書中指出:“c+是作為一種系統(tǒng)編程語言、作為一種為開發(fā)由大的系統(tǒng)部件組成的應(yīng)用而進(jìn)行設(shè)計(jì)的”。因此,在初學(xué)者編寫小型程序時(shí)很難看到c+的優(yōu)越性。雖然我在書中盡量結(jié)合實(shí)例來講,但限于本書定位于初學(xué)讀者,例題不可能很復(fù)雜、龐大,所以讀者總感到例題只是驗(yàn)證性的,有點(diǎn)牽強(qiáng)。從學(xué)習(xí)這一章開始,學(xué)生就會(huì)經(jīng)常問我,語法為什么是這樣、規(guī)定為什么這么多?進(jìn)而將語法規(guī)定作為討厭的東西,在內(nèi)心抵觸。我在書中已經(jīng)談了很多關(guān)于c+和面向?qū)ο蠓椒ǖ奶攸c(diǎn)、用途,但在編寫小程序時(shí)很難看到面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)。對于初學(xué)者來說,我建議換一種思維方式,如果目前還看不到某些語法規(guī)定的意義,先不

22、要鉆牛角尖。比如構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù),在本章的例題中,還體現(xiàn)不出它們的用途,那就先不理會(huì)它們,待以后用到的時(shí)候,再去體會(huì)其中的妙處,這一章里,就先了解一下這些語法規(guī)定。這樣想,學(xué)習(xí)的時(shí)候心情是否會(huì)輕松些呢?從這一章開始每章的最后一節(jié)都是一個(gè)實(shí)例人員信息管理系統(tǒng),這個(gè)例子貫穿后續(xù)各章節(jié),利用每章介紹的知識(shí)不斷豐富程序的功能,建議讀者仔細(xì)閱讀、體會(huì),并嘗試修改、補(bǔ)充程序的功能。本章中還介紹了利用uml語言表示類與對象的方法,以后各章還將進(jìn)一步介紹用uml語言表示類之間的關(guān)系,但這遠(yuǎn)不是uml語言的全部,這方面的內(nèi)容也不是初學(xué)時(shí)的重點(diǎn),讀者可以不必深究,了解一下就可以了。如果有需要,可以

23、另外學(xué)習(xí)軟件工程課程。第 5 章 c+程序的結(jié)構(gòu)本章主要是介紹與程序的結(jié)構(gòu)、模塊間的關(guān)系、數(shù)據(jù)共享相關(guān)的內(nèi)容。讀者學(xué)習(xí)這一章時(shí)的主要問題可能是感覺到與其它章節(jié)相比,這一章顯得有些蕪雜,語法規(guī)定很多。不過只要尋著程序結(jié)構(gòu)和數(shù)據(jù)共享這兩條主線,思路就會(huì)比較清晰。標(biāo)識(shí)符的作用域和對象的生存期問題,是研究程序模塊之間數(shù)據(jù)傳遞、數(shù)據(jù)共享的基礎(chǔ)。靜態(tài)成員是類的對象之間共享數(shù)據(jù)和代碼的手段。友元是不同的類之間、類與類外的函數(shù)之間共享數(shù)據(jù)的機(jī)制。而常引用、常對象、常成員為共享的數(shù)據(jù)提供了保護(hù)機(jī)制。使用多文件結(jié)構(gòu),有利于大型項(xiàng)目的分工合作、分別開發(fā)。如果要在一個(gè)項(xiàng)目的不同程序文件之間共享數(shù)據(jù)和代碼,就要用到外部

24、變量和外部函數(shù)。本章內(nèi)容語法規(guī)定較多,有的讀者對這些語法規(guī)定不太理解,總想找個(gè)老師問問:能不能這樣寫?是不是會(huì)有那樣的效果?如果周圍沒有人可以請教,常常感到束手無策。有的讀者逐一理解這些語法規(guī)定到也不難,但是會(huì)覺得記不住,還會(huì)混淆,其實(shí)根本原因還是沒有將每一個(gè)問題理解透徹。我建議讀者要自己驗(yàn)證每一個(gè)語法規(guī)定,用反證的方法更有助于理解和加深印象。比如,語法規(guī)定當(dāng)程序流程離開了一個(gè)變量的作用域,就不能使用該變量,那么你可以編一段程序,嘗試在變量的作用域之外使用這個(gè)變量,看看后果是什么。還可以嘗試用普通的成員函數(shù)去處理常對象,看看會(huì)是什么情況。這樣驗(yàn)證以后,很多疑問就解開了。以后學(xué)習(xí)后續(xù)章節(jié)時(shí)也是這

25、樣的,如果有些問題反復(fù)看都不能理解、反復(fù)想都想不清楚,那就不是看和想能解決的了,這時(shí)就需要自己動(dòng)手編一些程序來試驗(yàn),效果往往不錯(cuò)。第 6 章 數(shù)組、指針與字符串本章介紹了數(shù)組、指針與字符串。學(xué)習(xí)數(shù)組時(shí)首先要清楚它的用途,數(shù)組是用來存儲(chǔ)和處理群體數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)。使用數(shù)組類型,需要清楚數(shù)組元素的存儲(chǔ)方式、數(shù)組名、下標(biāo)等概念。數(shù)組是由相同類型元素組成的,其元素在內(nèi)存中是連續(xù)存放的,數(shù)組名就是數(shù)組元素的首地址,是一個(gè)常量,而下標(biāo)標(biāo)志著元素在數(shù)組中的位置序號(hào)。需要注意的是數(shù)組下標(biāo)從0開始,不是從1開始。由于數(shù)組的這種特性,訪問數(shù)組元素時(shí)只要寫出數(shù)組名和下標(biāo),系統(tǒng)就可以計(jì)算出該元素在內(nèi)存中的位置,從而

26、操作該元素。所以借助于數(shù)組可以通過循環(huán)語句按照某種規(guī)律依次處理大量數(shù)據(jù)。c+的基本數(shù)據(jù)類型中沒有字符串類型,本章介紹了用字符數(shù)組處理字符串的方法。這是從c語言延續(xù)過來的方法,但并不是一個(gè)好的方案,在c+程序中建議使用c+標(biāo)準(zhǔn)庫的string類。指針是c/c+的一個(gè)重要特點(diǎn),也是學(xué)習(xí)的一個(gè)難點(diǎn)。要很好地理解和使用指針,首先需要對計(jì)算機(jī)的內(nèi)存和內(nèi)存地址等概念有所了解,要知道執(zhí)行中的程序代碼和當(dāng)前使用的數(shù)據(jù)都是存放在內(nèi)存中的。指向?qū)ο蟮闹羔樖菍ο蟮牡刂罚赶蚝瘮?shù)的指針是函數(shù)代碼的地址。指向類的非靜態(tài)成員的指針使用起來與一般指針略有不同,因?yàn)榉庆o態(tài)成員是屬于對象的,所以必須通過對象名來訪問。有了指針,

27、使程序員有了更多的靈活性,同時(shí)也帶來一些不安全因素,增加了程序出錯(cuò)的機(jī)會(huì),因此除了在十分必要的情況下,程序中一般盡量不要使用指針。比如,訪問數(shù)組元素既可以借助于下標(biāo)也可以利用指針,通常用下標(biāo)是比較好的選擇。但是當(dāng)需要進(jìn)行動(dòng)態(tài)內(nèi)存分配時(shí),就必須使用指針來存放內(nèi)存地址了。應(yīng)用動(dòng)態(tài)內(nèi)存分配技術(shù),使程序可以有效地使用內(nèi)存空間,但是當(dāng)對象的成員指向動(dòng)態(tài)分配的內(nèi)存空間時(shí),就需要為這個(gè)類編寫具有深拷貝功能的拷貝構(gòu)造函數(shù),還要在析構(gòu)函數(shù)中記得釋放動(dòng)態(tài)分配的空間。使用指針時(shí),要特別注意避免空指針操作,也就是指針一定要先初始化再使用。使用數(shù)組時(shí),要注意數(shù)組名是常量不能被賦值。下面是初學(xué)者很容易犯的錯(cuò)誤:char

28、a4, *p1, *p2;cinp1; /錯(cuò)誤,p1沒有被初始化p2=a; cinp2; /正確a=abc; /錯(cuò)誤,數(shù)組名不能被賦值p1=abc; /正確,將字符串常量abc的首地址賦給p1學(xué)習(xí)這一章時(shí),要善于利用編譯器的debug功能觀察指針變量中的地址值和該地址中的數(shù)據(jù),觀察數(shù)組中元素的排列,以及動(dòng)態(tài)分配的內(nèi)存空間中的數(shù)據(jù)。第 7 章 繼承與派生本章介紹類的繼承關(guān)系,與類的組合關(guān)系相似類的繼承也是為了代碼重用。使用繼承首先要理解繼承關(guān)系的含義,當(dāng)需要重用一個(gè)類的代碼時(shí)要區(qū)別該問題應(yīng)該使用類的組合關(guān)系還是類的繼承關(guān)系來描述,通常可以用“是一種”來檢驗(yàn)類之間是否應(yīng)存在繼承關(guān)系。例如,汽車是一

29、種交通工具,因此“汽車”類可以繼承“交通工具”類。雖然在構(gòu)成“汽車”類時(shí)需要利用“車輪”類,但是“汽車”與“車輪”之間不存在上述關(guān)系,而存在整體與部件的關(guān)系,因此用類的組合為宜。在使用繼承關(guān)系的時(shí)候,從基類繼承的成員的訪問控制屬性需要特別注意,初學(xué)時(shí)不太容易記住。首先要明確從基類繼承的成員的訪問控制屬性受兩方面因素影響:一是成員在基類中原來聲明的訪問控制屬性,二是繼承方式。很多讀者學(xué)習(xí)本章時(shí)都有這樣的疑問:分別在什么情況下使用公有繼承、保護(hù)繼承、私有繼承?簡單來說,如果希望基類的成員被繼承過來以后與派生類的成員一樣,就用公有繼承。如果只希望派生類的成員及其子類能方便的訪問從基類繼承的成員,不希

30、望類外的函數(shù)訪問這些成員,可以用保護(hù)繼承。如果希望基類的成員被繼承以后都變成私有的,就用私有繼承。無論用哪種繼承方式,基類的私有成員被繼承以后都不能被直接訪問。對待比較簡單的問題,像這樣選擇就可以了,對于復(fù)雜系統(tǒng)的開發(fā),需要有更多的考慮,那是系統(tǒng)設(shè)計(jì)的任務(wù)。運(yùn)用繼承關(guān)系時(shí),構(gòu)造函數(shù)和析構(gòu)函數(shù)的特性也是一個(gè)重要方面。要注意,基類的構(gòu)造函數(shù)和析構(gòu)函數(shù)都不被繼承,但是在建立派生類對象時(shí)基類的構(gòu)造函數(shù)會(huì)首先被自動(dòng)調(diào)用,派生類對象消亡時(shí),最后會(huì)自動(dòng)調(diào)用基類的析構(gòu)函數(shù)。派生類的構(gòu)造函數(shù)要負(fù)責(zé)為基類的構(gòu)造函數(shù)傳遞參數(shù),否則基類的缺省構(gòu)造函數(shù)會(huì)自動(dòng)被調(diào)用。當(dāng)同時(shí)繼承多個(gè)基類且有對象成員時(shí),要清楚構(gòu)造函數(shù)的調(diào)用

31、次序是先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用對象成員所在類的構(gòu)造函數(shù),最后執(zhí)行派生類的構(gòu)造函數(shù)體,析構(gòu)函數(shù)的執(zhí)行次序相反。為了觀察對象的構(gòu)造、析構(gòu)過程,可以在構(gòu)造、析構(gòu)函數(shù)中輸出相應(yīng)信息,或者利用debug工具跟蹤程序流程。在多繼承的情況下,如果存在公共基類,就會(huì)出現(xiàn)成員標(biāo)識(shí)二義性的問題,這時(shí)將公共基類作為虛基類繼承是一個(gè)比較好的解決方案。本章最后一節(jié)的應(yīng)用實(shí)例有助于讀者對類的繼承和虛基類的理解,建議讀者閱讀該程序以后嘗試添加更多的功能。第 8 章 多態(tài)性本章介紹多態(tài)性,多態(tài)是指同樣的消息被不同類型的對象接收時(shí)導(dǎo)致不同的行為。首先介紹的運(yùn)算符重載,是一種靜態(tài)多態(tài)機(jī)制,它與函數(shù)重載的道理時(shí)一樣的。實(shí)際上“

32、將操作表示為函數(shù)調(diào)用火時(shí)將操作表示為運(yùn)算符之間沒有什么根本差別”,這是bjarne stroustup在c+語言的設(shè)計(jì)和演化一書中說的。認(rèn)識(shí)到這一點(diǎn),編寫運(yùn)算符重載程序也就不是什么難事了。不過要注意的是,重載運(yùn)算符是一種擴(kuò)充語言的機(jī)制,而不是改變語言的機(jī)制。因此我們只能將已有的運(yùn)算符重載使之作用于新的類,不能增加新的運(yùn)算符,也不能將重載的運(yùn)算符作用于基本數(shù)據(jù)類型,c+的語法對此都有嚴(yán)格的限制。動(dòng)態(tài)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的重要特征,在c+中是通過虛函數(shù)來實(shí)現(xiàn)的。請讀者不要將虛函數(shù)與前一章講的虛基類混淆,二者的作用是不同的。虛基類解決的是類成員標(biāo)識(shí)二義性和信息冗余問題,而虛函數(shù)是實(shí)現(xiàn)動(dòng)態(tài)多態(tài)

33、性的基礎(chǔ)。派生類對象可以初始化基類對象的引用,派生類對象的地址可以賦值給基類的指針,這意味著一個(gè)派生類的對象可以當(dāng)作基類的對象來用。但是如果想要通過基類的指針和引用訪問派生類對象的成員,就要使用虛函數(shù),這便是多態(tài)。很多情況下,基類中的虛函數(shù)是為了設(shè)計(jì)的目的而聲名的,沒有實(shí)現(xiàn)代碼,這就是純虛函數(shù),其所在的類成為抽象類。抽象類是為后繼所有派生類設(shè)計(jì)的同一抽象接口。最后一節(jié)的應(yīng)用實(shí)例,體現(xiàn)了多態(tài)性在實(shí)際應(yīng)用中的作用。第 9 章 群體類和群體數(shù)據(jù)的組織本章介紹了對線性群體數(shù)據(jù)的存儲(chǔ)和處理,介紹這些內(nèi)容的目的有三方面:一是以數(shù)組類、鏈表類、棧類、隊(duì)列類以及查找、排序算法為綜合例題,對前面章節(jié)的內(nèi)容進(jìn)行全

34、面復(fù)習(xí);二是使讀者掌握一些常用的數(shù)據(jù)結(jié)構(gòu)和算法,能夠解決一些略復(fù)雜的問題,也為下一章學(xué)習(xí)c+標(biāo)準(zhǔn)模板庫打下基礎(chǔ)。在第六章中曾經(jīng)介紹過一個(gè)動(dòng)態(tài)數(shù)組類,但是其結(jié)構(gòu)和功能都比較簡單。本章介紹的安全數(shù)組類運(yùn)用了動(dòng)態(tài)內(nèi)存分配和運(yùn)算符重載,使得該類對象既具有可變的大小、安全的訪問機(jī)制,又有基本數(shù)組的訪問形式。鏈表是一種存儲(chǔ)順序訪問的線性群體的數(shù)據(jù)結(jié)構(gòu),本章介紹的單鏈表由一組具有數(shù)據(jù)成員和后繼指針的結(jié)點(diǎn)構(gòu)成。與數(shù)組相比,鏈表有著更靈活的動(dòng)態(tài)內(nèi)存分配機(jī)制,插入和刪除結(jié)點(diǎn)時(shí)也無須移動(dòng)其它元素。以數(shù)組類和鏈表類為基礎(chǔ),對數(shù)據(jù)元素的訪問加以限制,便構(gòu)成了棧類和隊(duì)列類。棧具有后進(jìn)先出的特性,也就是數(shù)據(jù)元素的插入和刪除

35、都只能在棧頂進(jìn)行。隊(duì)列具有先進(jìn)先出的特性,元素只能從隊(duì)尾入隊(duì),從隊(duì)頭出隊(duì)。另外本章還介紹了幾種數(shù)據(jù)查找和排序算法。在對上述數(shù)據(jù)結(jié)構(gòu)和算法的介紹中,綜合運(yùn)用了前面章節(jié)講過的知識(shí),學(xué)習(xí)這一章的同時(shí)也起到了復(fù)習(xí)的作用。為了使數(shù)組類與基本數(shù)組的訪問形式一樣,定義了一系列運(yùn)算符重載函數(shù)。在數(shù)組類的拷貝構(gòu)造函數(shù)和=運(yùn)算符函數(shù)中,可以看到深拷貝與淺拷貝的區(qū)別。本章中的數(shù)組、鏈表、棧、隊(duì)列都是以類模板的形式聲明和實(shí)現(xiàn)的,查找和排序算法也都是以函數(shù)模板形式定義的,這是c+獨(dú)特的類型參數(shù)化機(jī)制。通過這些類模板和函數(shù)模板的應(yīng)用,讀者可以很容易的體會(huì)到模板的作用,而這正是下一章要將的泛形程序設(shè)計(jì)的基礎(chǔ)。本章對類模版的

36、介紹比較簡單,沒有涉及類模板的繼承關(guān)系。對初學(xué)者來說重點(diǎn)是理解模板的作用,學(xué)會(huì)簡單的應(yīng)用,對于較復(fù)雜的語法問題,可以先不考慮。有些讀者可能會(huì)感覺本章的例題比起以前的章節(jié)來難度明顯增大了許多,不過本章的教學(xué)目標(biāo)并不是要使讀者僅僅學(xué)了這一章就能夠設(shè)計(jì)、實(shí)現(xiàn)同樣難度的類模板、函數(shù)模板。而是通過這些例題復(fù)習(xí)以前的知識(shí)、學(xué)會(huì)模板的聲明和應(yīng)用,同時(shí)初步了解幾個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法,并能夠應(yīng)用已經(jīng)編寫好的模板來解決問題。這也是為下一章打基礎(chǔ)。要深入學(xué)習(xí)有關(guān)數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,還需要專門的數(shù)據(jù)結(jié)構(gòu)教材。第 10 章 泛型程序設(shè)計(jì)與c+標(biāo)準(zhǔn)模板庫這一章的目標(biāo)主要是初步了解泛形程序設(shè)計(jì)的概念,學(xué)會(huì)c+標(biāo)準(zhǔn)模板庫(st

37、l)的使用方法,為此本章介紹了一些與之有關(guān)的基本概念、術(shù)語和簡單的應(yīng)用舉例。stl是最新的c+標(biāo)準(zhǔn)函數(shù)庫中的一個(gè)子集,這個(gè)龐大的子集占據(jù)了整個(gè)庫的大約80%的分量。要很好地理解stl,不僅需要相關(guān)的數(shù)據(jù)結(jié)構(gòu)知識(shí),而且需要有一定的編程經(jīng)驗(yàn)。因此本章旨在使讀者對stl有一個(gè)基本了解,為進(jìn)一步學(xué)習(xí)使用stl打下一個(gè)基礎(chǔ)。讀者只要能看懂本章的例題,并能夠模仿著編寫類似的簡單程序就可以了。要完全掌握stl不是一朝一夕的事,需要參考stl手冊,并在長期編程實(shí)踐中積累經(jīng)驗(yàn)。ansi/iso c+文檔中的stl是一個(gè)僅被描述在紙上的標(biāo)準(zhǔn),對于諸多c+編譯器而言,需要有各自實(shí)際的stl,它們或多或少的實(shí)現(xiàn)了標(biāo)準(zhǔn)

38、中所描述的內(nèi)容,這樣才能夠?yàn)槲覀兯谩V杂胁煌膶?shí)現(xiàn)版本,則存在諸多原因,有歷史的原因,也有各自編譯器生產(chǎn)廠商的原因。stl網(wǎng)站(本書的附錄c給出了stl中通用算法函數(shù)原型及說明。第 11 章 流類庫與輸入/輸出i/o流類庫是一個(gè)提供輸入/輸出功能的,面向?qū)ο蟮念悗?。流是對輸?輸出的一個(gè)抽象表述,程序通過從流中提取字符和向流中插入字符來實(shí)現(xiàn)輸入和輸出。一般來說,流是與實(shí)際的字符源或目標(biāo)相關(guān)的,例如磁盤文件、鍵盤或顯示器,所以對流進(jìn)行的提取或插入操作實(shí)際上就是對物理設(shè)備的操作。標(biāo)準(zhǔn)輸入/輸出流對象是連接程序與標(biāo)準(zhǔn)輸入/輸出設(shè)備的。常用的標(biāo)準(zhǔn)輸出流有:cout、cerr、clog,標(biāo)準(zhǔn)輸入流

39、有:cin。標(biāo)準(zhǔn)流對象都是在中預(yù)先聲明好的。除了標(biāo)準(zhǔn)輸入/輸出流以外,使用其它的流之前都要首先聲明流對象,因此對于i/o流類庫的結(jié)構(gòu)需要十分清楚。輸入/輸出流類有許多成員函數(shù),除了主教材中介紹的以外,讀者如果需要詳細(xì)了解更多的信息,請查閱關(guān)于標(biāo)準(zhǔn)c+庫的書籍和手冊。ttp:/ 有i/o流類庫的詳細(xì)說明及例題,使用vc+6.0開發(fā)環(huán)境的讀者,可以查閱msdn聯(lián)機(jī)幫助系統(tǒng),獲得標(biāo)準(zhǔn)c+庫的說明。第 12 章 異常處理在大型面向?qū)ο髴?yīng)用程序中,經(jīng)常涉及到異常處理。使用異常處理使得應(yīng)用方案的設(shè)計(jì)更方便、具體。c提供了一個(gè)非常好的異常處理方法。通過這種方法,被調(diào)函數(shù)可以告知調(diào)用函數(shù):有某種錯(cuò)誤出現(xiàn)。c中

40、的異常處理可以涵蓋到對任何錯(cuò)誤的處理,不論是內(nèi)存分配失敗還是程序運(yùn)行過程中類型轉(zhuǎn)換錯(cuò)誤。異常處理提供了一種將控制和信息從錯(cuò)誤發(fā)生點(diǎn)轉(zhuǎn)移到異常處理點(diǎn)的方法。當(dāng)一個(gè)函數(shù)中出現(xiàn)錯(cuò)誤而它自身不能解決時(shí),這個(gè)函數(shù)可以拋出(throw)一個(gè)異常,通知它的直接或間接調(diào)用者處理這個(gè)錯(cuò)誤。一個(gè)函數(shù)可以通過捕獲(catch)以常來表明它希望處理這種異常。c提供了三個(gè)關(guān)鍵字來對例外進(jìn)行處理。 try:可能拋出異常的段程序必須以try開始。緊跟著try的是一段包含在大括號(hào)中的程序,這段程序有可能拋出異常。throw:異常要通過關(guān)鍵字throw來拋出。異常對象的類型決定了哪一個(gè)catch語句可以捕獲這一異常。catch

41、:處理異常的程序必須以catch開始。跟隨在catch后面的是一段包含在大括號(hào)中的程序。第 13 章 mfc庫與windows程序開發(fā)概述編寫windows環(huán)境下的圖形用戶界面程序,只是c+語言的眾多應(yīng)用領(lǐng)域之一,mfc庫是一種c+基礎(chǔ)庫,為windows這一特定的操作系統(tǒng)環(huán)境下的圖形用戶界面程序提供了強(qiáng)大的支持。本章的目的在于使讀者對windows環(huán)境下的應(yīng)用開發(fā)有一個(gè)初步了解,以此作為c+語言的應(yīng)用實(shí)例,并不期望讀者通過本章學(xué)習(xí)能夠自如地編寫windows程序。對于初學(xué)編程的讀者,可以將本章作為一般只是瀏覽,不必追求完全理解。有興趣的話,應(yīng)該按照例13-1的說明,自己上機(jī)實(shí)踐一下,對win

42、dows程序的開發(fā)就有一個(gè)概要性理解了。 面向?qū)ο蟪绦蛟O(shè)計(jì)課文精講串講文字材料 一、面向?qū)ο蠹癱+基礎(chǔ)知識(shí) (一)面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ) (1)面向?qū)ο蟮膬?yōu)點(diǎn) (2)面向?qū)ο蟪绦虻慕Y(jié)構(gòu) (3)面向?qū)ο蟪绦蛘Z言的關(guān)鍵要素 (4)數(shù)據(jù)封裝 (5)c+ 語言的來龍去脈 (二)c+ 基本程序結(jié)構(gòu) (1)作用域與作用域運(yùn)算符: (2)const修飾符 (3)函數(shù) (4)new 和 delete 運(yùn)算符 (5)引用 二、類和對象 (一)類 (1)類的聲明 (2)類的成員 (3)類中成員的訪問屬性 (4) 類的作用域 (5)類的兩種聲明方式 (6)空類 (7)嵌套類 (8)類的實(shí)例化 (二)數(shù)據(jù)成員 (1)數(shù)

43、據(jù)成員的類型 (2)數(shù)據(jù)成員的修飾符 (3)數(shù)據(jù)成員的初始化 (三)成員函數(shù) (1)成員函數(shù)的定義 (2)內(nèi)聯(lián)成員函數(shù) (3)重載成員函數(shù) (4)帶缺省參數(shù)的成員函數(shù) (5)this 指針 (四)對象 (1)對象的定義 (2)對象的引用 (3)對象的生命周期 (4)對象的相互賦值 (5)對象可以作為數(shù)組的元素 (6)可以說明指向?qū)ο蟮闹羔?(7)對象可以用作函數(shù)參數(shù) (8)一個(gè)對象可以用作另一個(gè)對象的成員 (五)結(jié)構(gòu)和聯(lián)合 (1)使用結(jié)構(gòu)定義類 (2)使用聯(lián)合定義類 三、構(gòu)造函數(shù)與析構(gòu)函數(shù) (一)構(gòu)造函數(shù) (1)構(gòu)造函數(shù)的作用 (2)構(gòu)造函數(shù)的定義 (3)構(gòu)造函數(shù)的性質(zhì) (4)構(gòu)造函數(shù)的種類

44、(5)構(gòu)造函數(shù)與運(yùn)算符new (6)構(gòu)造函數(shù)用作類型轉(zhuǎn)換函數(shù) (7)構(gòu)造函數(shù)的構(gòu)成 (8)構(gòu)造函數(shù)的調(diào)用 (二)析構(gòu)函數(shù) (1)析構(gòu)函數(shù)的作用 (2)析構(gòu)函數(shù)的定義 (3)析構(gòu)函數(shù)的性質(zhì) (4)缺省析構(gòu)函數(shù) (5)析構(gòu)函數(shù)與運(yùn)算符delete (6)析構(gòu)函數(shù)的調(diào)用 (7)析構(gòu)函數(shù)的特別事項(xiàng) (三)構(gòu)造函數(shù)和析構(gòu)函數(shù)與對象 (1)對象的初始化 (2)對象賦值 (3)對象成員 (4)對象數(shù)組 四、繼承和派生類 (一)基本概念 (1)什么是派生? (2)派生的性質(zhì) (3)派生后的變化 (4)派生類的類型 (5)派生的目的 (6)保護(hù)成員的作用 (二)派生類的聲明格式 (1)單一繼承 (2)多重繼承

45、(3)派生方式 (三)訪問權(quán)限 (1)公有派生的訪問權(quán)限 (2)私有派生的訪問權(quán)限 (四)賦值兼容規(guī)則 (1)適應(yīng)范圍 (2)含義 (3)規(guī)則 (五)派生類的構(gòu)造函數(shù) (1)一般格式 (2)構(gòu)造規(guī)則 (3)調(diào)用順序 (六)派生類的析構(gòu)函數(shù) (1)格式 (2)調(diào)用順序 (七)二義性及其解決 (1)二義性的產(chǎn)生及作用域運(yùn)算符 (2)支配規(guī)則解決二義性 (八)重復(fù)繼承 (1)何為重復(fù)繼承? (2)c+對重復(fù)繼承的限制 (九)虛基類 (1)問題的提出 (2)虛基類的定義 (3)虛基類的作用 (4)帶虛基類的派生類的聲明 (5)帶虛基類的構(gòu)造函數(shù)的構(gòu)造 (6)帶虛基類的構(gòu)造函數(shù)的調(diào)用順序 (7)帶虛基類

46、的析構(gòu)函數(shù)的調(diào)用順序 五、多態(tài)性與虛函數(shù) (一)多態(tài)性 (1)何為多態(tài)性? (2)聯(lián)編的概念 (3)多態(tài)性與聯(lián)編 (4)重載 (5)引入派生類后的指針 (二)虛函數(shù) (1)函數(shù)的作用 (2)虛函數(shù)的定義和說明 (3)虛函數(shù)的訪問權(quán)限 (4)成員函數(shù)與虛函數(shù) (5)構(gòu)造函數(shù)、析構(gòu)函數(shù)與虛函數(shù) (6)空虛函數(shù) (7)重載函數(shù)與虛函數(shù) (8)多重繼承與虛函數(shù) (三)純虛函數(shù)與抽象類 (1)何為純虛函數(shù)? (2)純虛函數(shù)的定義 (3)何為抽象類? (4)抽象類的性質(zhì) (四)虛析構(gòu)函數(shù) 六、進(jìn)一步使用成員函數(shù) (一)靜態(tài)成員 (1)靜態(tài)數(shù)據(jù)成員 (2)靜態(tài)成員函數(shù) (二)友元 (1)友元函數(shù) (2)友元

47、成員 (3)友元類 (4)友元和派生類 (三)const 對象和volatile 對象 (1)返回對象 (2)使用帶有this指針的函數(shù) (3)同時(shí)定義const和volatile成員函數(shù) (4)注意事項(xiàng) (四)轉(zhuǎn)換函數(shù) (五)指向類成員的指針 (1)指向數(shù)據(jù)成員的指針 (2)指向成員函數(shù)的指針 (六)數(shù)組與類 七、運(yùn)算符重載及流庫類 (一)運(yùn)算符重載 (1)重載方法 (2)運(yùn)算符重載的方式 (3)運(yùn)算符重載的說明 (4)對運(yùn)算符重載的調(diào)用 (5)+ 與 - 運(yùn)算符的重載 (6)對運(yùn)算符“()”的重載 (7)對運(yùn)算符“”的重載 (二)運(yùn)算重載與類型轉(zhuǎn)換 (三)c+ 的流與流庫類 (1)c+ 的

48、流 (2)streambuf類 (3)ios 類 (四)輸入輸出格式控制 (1)用ios的成員函數(shù)進(jìn)行格式控制 (2)用操縱符進(jìn)行格式控制 (3)自定義操縱符 (五)運(yùn)算符“”和“”的重載 (1)重載輸出運(yùn)算符“” (六)文件的輸入輸出 (1)文件的打開與關(guān)閉 (2)文本文件的輸入輸出 (3)二進(jìn)制文件的輸入輸出 (4)流的錯(cuò)誤處理 八、模板 (一)模板的概念 (二)函數(shù)模板與模板函數(shù) (1)函數(shù)模板的聲明和模板函數(shù)的生成 (2)函數(shù)模板的異常處理 (三)類模板與模板類 (1)類模板 (2)定義模板類與它的成員函數(shù) (3)類模板的派生 九、進(jìn)一步掌握面向?qū)ο蟪绦蛟O(shè)計(jì) (一)面向?qū)ο蟮脑O(shè)計(jì) (1

49、)類的確定 (2)面向?qū)ο蟮脑O(shè)計(jì)方法 (3)類群和類樹 (4)類群和類樹 (二)設(shè)計(jì)中的幾個(gè)問題 (1)整體認(rèn)識(shí) (2)類的組織 (3)類和函數(shù)的設(shè)計(jì)與說明 (4)繼承和面向程序設(shè)計(jì) 十、試題分析 (一)關(guān)于各種試題類型的分析 (1)自考試題的出題特點(diǎn) (2)各種試題類型的特點(diǎn)及答題中應(yīng)注意的事項(xiàng) 單項(xiàng)選擇題 填空題 改錯(cuò)題 完成程序題 程序分析題 面向?qū)ο蟪绦蛟O(shè)計(jì)第一章內(nèi)容提要 一、面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ) (1)面向過程與面向?qū)ο?1)面向過程及其困境 所謂“面向過程”,就是不必了解計(jì)算機(jī)的內(nèi)部邏輯,而是把精力主要集中在解題算法的邏輯和過程的描 述上,使用過程語言編寫程序,通過程序把解決問題的

50、執(zhí)行步驟告訴計(jì)算機(jī)。 面向過程的程序的可重用性差、維護(hù)代價(jià)高。也引入了困擾軟件開發(fā)的兩大難題,即: 如何超越程序復(fù)雜性障礙; 如何在計(jì)算機(jī)系統(tǒng)中自然地表示客觀世界,即對象模型。 2)面向?qū)ο蠹捌鋬?yōu)點(diǎn) 面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)體,也就是對象組成的。每種對象都有自己的內(nèi)部狀態(tài) 和運(yùn)動(dòng)規(guī)律,不同對象之間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),并且進(jìn)而構(gòu)成整個(gè)客觀世界 。按照這樣的思想設(shè)計(jì)程序,就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。 面向?qū)ο蟪绦蛟O(shè)計(jì)方法是軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的新方法。這種新方法是增加軟件的可擴(kuò)充性和可重用性 ,來改善并提高程序員的生產(chǎn)能力,并能控制軟件的復(fù)雜性和軟件的維護(hù)開

51、銷。 “面向?qū)ο蟆钡膬?yōu)點(diǎn)是: 第一,有希望解決軟件工程的兩個(gè)主要問題軟件復(fù)雜性控制和軟件產(chǎn)生率的提高; 第二,符合人們的思維習(xí)慣,即能夠自然地表現(xiàn)現(xiàn)實(shí)世界的實(shí)體和問題,這對軟件開發(fā)過程有著重要的意 義。 (2) 面向?qū)ο蟪绦蛟O(shè)計(jì)方法 1)面向?qū)ο蟮某绦蛟O(shè)計(jì)中的對象 面向?qū)ο蟮某绦蛟O(shè)計(jì),是通過為數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對程序進(jìn)行模塊化的一種程序 設(shè)計(jì)方法,這些模塊可用作樣板,在需要時(shí)再建立其副本。所以對象是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,通過將 內(nèi)存分塊,每個(gè)模塊(即對象)在功能上相互之間保持相對獨(dú)立。并且: 這些內(nèi)存塊中不但存儲(chǔ)數(shù)據(jù),而且也存儲(chǔ)代碼; 這些內(nèi)存塊的結(jié)構(gòu)可被用作樣板產(chǎn)生對象的更多副本。 在面向?qū)ο蟮某绦蛑?,對象之間只能通過函數(shù)調(diào)用實(shí)現(xiàn)相互通信。一個(gè)對象可以調(diào)用另一個(gè)對象的函數(shù), 這樣,對象之間的相互作用方式是仔細(xì)控制的,處于一個(gè)對象外部的代碼就沒有機(jī)會(huì)通過直接修改對象的 內(nèi)存區(qū)域妨礙對象發(fā)揮其功能。 對象的這一特點(diǎn)導(dǎo)致了模擬現(xiàn)實(shí)世界的一種新型方法:面向?qū)ο缶褪菍⑹澜缈闯墒怯梢唤M彼此相關(guān)并且能 相互通信的實(shí)體即對象組成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論