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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、代碼增大。inline函數(shù)適合成員函數(shù)和自由函數(shù)。在類(lèi)中實(shí)現(xiàn)的函數(shù)自動(dòng)為內(nèi)聯(lián)函數(shù)。inline必須定義到函數(shù)的實(shí)現(xiàn)上,例如:inline intplusone(int)是無(wú)效的。友元函數(shù)在類(lèi)的體內(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)對(duì)象在main結(jié)束或exit()被調(diào)用時(shí)才調(diào)用自身的析構(gòu)函數(shù)。這意味著,在對(duì)象的析構(gòu)函數(shù)中調(diào)用exit()是很危險(xiǎn)的,有可能進(jìn)

7、入一個(gè)死循環(huán)中。調(diào)用abort()來(lái)退出函數(shù),靜態(tài)對(duì)象的析構(gòu)函數(shù)并不會(huì)被調(diào)用。我們可以用atexit()來(lái)指定跳出main或調(diào)用exit時(shí)要執(zhí)行的操作,用atexit注冊(cè)的函數(shù),可以在所有對(duì)象的析構(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;即它是全局的,外部可見(jiàn)的staticintb

8、;/靜態(tài)變量,static和extern相反,只在*.cpp中有效,對(duì)其他單元(文件)是不可見(jiàn)的。函數(shù)的定義和上面相同。main()類(lèi)的靜態(tài)成員變量可以如下賦值:intx:s=23;(在*.cpp中,無(wú)論公私都可以)21.名字空間(namespace):定義一個(gè)名字空間,然后使用unsing就可以將當(dāng)前的類(lèi)型上下文轉(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.一般對(duì)于函數(shù)flaotf(inta,intb); 某些c+編譯器編譯后生成_f_int_int的名字,有些c編譯器則生成_f的名字。故在c+中鏈接c的庫(kù)函數(shù)時(shí)要用extern“c”告訴編譯器,按c的規(guī)則來(lái)編譯函數(shù)。類(lèi)似的還有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如果沒(méi)有賦值構(gòu)造函數(shù)則結(jié)果:x:constructx:constructoperator=x:destruct(如果直接xa=x;這不掉用一般的構(gòu)造函數(shù),調(diào)用復(fù)制構(gòu)造函數(shù))指向類(lèi)的成員函數(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 章 緒論本章作為全書(shū)的開(kāi)篇,旨在使讀者初步了解面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言之由來(lái),初步了解面向?qū)ο蟮某绦蛟O(shè)計(jì)思想之基本特點(diǎn),概要性地了解面向?qū)ο蟮能浖_(kāi)發(fā)方法,為后續(xù)章節(jié)的學(xué)習(xí)奠定基礎(chǔ)。為什么需要首先有一個(gè)初步和概要性的了解呢?一方面,這是為了在以后的學(xué)習(xí)中具體接觸到每一個(gè)新的概念、語(yǔ)法時(shí)都能夠清楚地認(rèn)識(shí)到,它在面向?qū)ο蟮姆椒ㄖ小⒃赾+語(yǔ)言中的地位和作用是什么。另一方面,是希望讀者在一開(kāi)始就能夠認(rèn)識(shí)到,面向?qū)ο蟮乃枷肱c人類(lèi)所習(xí)慣的思維方式是一致的,雖然c+語(yǔ)言比起面向過(guò)程的語(yǔ)言(如c語(yǔ)言)來(lái)要復(fù)雜

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

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

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

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

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

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

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

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

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

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

22、要鉆牛角尖。比如構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù),在本章的例題中,還體現(xiàn)不出它們的用途,那就先不理會(huì)它們,待以后用到的時(shí)候,再去體會(huì)其中的妙處,這一章里,就先了解一下這些語(yǔ)法規(guī)定。這樣想,學(xué)習(xí)的時(shí)候心情是否會(huì)輕松些呢?從這一章開(kāi)始每章的最后一節(jié)都是一個(gè)實(shí)例人員信息管理系統(tǒng),這個(gè)例子貫穿后續(xù)各章節(jié),利用每章介紹的知識(shí)不斷豐富程序的功能,建議讀者仔細(xì)閱讀、體會(huì),并嘗試修改、補(bǔ)充程序的功能。本章中還介紹了利用uml語(yǔ)言表示類(lèi)與對(duì)象的方法,以后各章還將進(jìn)一步介紹用uml語(yǔ)言表示類(lèi)之間的關(guān)系,但這遠(yuǎn)不是uml語(yǔ)言的全部,這方面的內(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í)的主要問(wèn)題可能是感覺(jué)到與其它章節(jié)相比,這一章顯得有些蕪雜,語(yǔ)法規(guī)定很多。不過(guò)只要尋著程序結(jié)構(gòu)和數(shù)據(jù)共享這兩條主線,思路就會(huì)比較清晰。標(biāo)識(shí)符的作用域和對(duì)象的生存期問(wèn)題,是研究程序模塊之間數(shù)據(jù)傳遞、數(shù)據(jù)共享的基礎(chǔ)。靜態(tài)成員是類(lèi)的對(duì)象之間共享數(shù)據(jù)和代碼的手段。友元是不同的類(lèi)之間、類(lèi)與類(lèi)外的函數(shù)之間共享數(shù)據(jù)的機(jī)制。而常引用、常對(duì)象、常成員為共享的數(shù)據(jù)提供了保護(hù)機(jī)制。使用多文件結(jié)構(gòu),有利于大型項(xiàng)目的分工合作、分別開(kāi)發(fā)。如果要在一個(gè)項(xiàng)目的不同程序文件之間共享數(shù)據(jù)和代碼,就要用到外部

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

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

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

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

28、a4, *p1, *p2;cinp1; /錯(cuò)誤,p1沒(méi)有被初始化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 章 繼承與派生本章介紹類(lèi)的繼承關(guān)系,與類(lèi)的組合關(guān)系相似類(lèi)的繼承也是為了代碼重用。使用繼承首先要理解繼承關(guān)系的含義,當(dāng)需要重用一個(gè)類(lèi)的代碼時(shí)要區(qū)別該問(wèn)題應(yīng)該使用類(lèi)的組合關(guān)系還是類(lèi)的繼承關(guān)系來(lái)描述,通??梢杂谩笆且环N”來(lái)檢驗(yàn)類(lèi)之間是否應(yīng)存在繼承關(guān)系。例如,汽車(chē)是一

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

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

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

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

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

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

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

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

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

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

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

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

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

42、dows程序的開(kāi)發(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(yǔ)言的關(guān)鍵要素 (4)數(shù)據(jù)封裝 (5)c+ 語(yǔ)言的來(lái)龍去脈 (二)c+ 基本程序結(jié)構(gòu) (1)作用域與作用域運(yùn)算符: (2)const修飾符 (3)函數(shù) (4)new 和 delete 運(yùn)算符 (5)引用 二、類(lèi)和對(duì)象 (一)類(lèi) (1)類(lèi)的聲明 (2)類(lèi)的成員 (3)類(lèi)中成員的訪問(wèn)屬性 (4) 類(lèi)的作用域 (5)類(lèi)的兩種聲明方式 (6)空類(lèi) (7)嵌套類(lèi) (8)類(lèi)的實(shí)例化 (二)數(shù)據(jù)成員 (1)數(shù)

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

44、(5)構(gòu)造函數(shù)與運(yùn)算符new (6)構(gòu)造函數(shù)用作類(lèi)型轉(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ù)與對(duì)象 (1)對(duì)象的初始化 (2)對(duì)象賦值 (3)對(duì)象成員 (4)對(duì)象數(shù)組 四、繼承和派生類(lèi) (一)基本概念 (1)什么是派生? (2)派生的性質(zhì) (3)派生后的變化 (4)派生類(lèi)的類(lèi)型 (5)派生的目的 (6)保護(hù)成員的作用 (二)派生類(lèi)的聲明格式 (1)單一繼承 (2)多重繼承

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

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

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

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

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

50、執(zhí)行步驟告訴計(jì)算機(jī)。 面向過(guò)程的程序的可重用性差、維護(hù)代價(jià)高。也引入了困擾軟件開(kāi)發(fā)的兩大難題,即: 如何超越程序復(fù)雜性障礙; 如何在計(jì)算機(jī)系統(tǒng)中自然地表示客觀世界,即對(duì)象模型。 2)面向?qū)ο蠹捌鋬?yōu)點(diǎn) 面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)體,也就是對(duì)象組成的。每種對(duì)象都有自己的內(nèi)部狀態(tài) 和運(yùn)動(dòng)規(guī)律,不同對(duì)象之間的相互聯(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ò)充性和可重用性 ,來(lái)改善并提高程序員的生產(chǎn)能力,并能控制軟件的復(fù)雜性和軟件的維護(hù)開(kāi)

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論