




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《C++語言教程》
第一章
引論
C++語言是一個(gè)面向?qū)ο笳Z言,它所支持的面向?qū)ο蟮母拍钊菀讓栴}空間直接映射到程序空間,為程序員提供了一種與傳統(tǒng)結(jié)構(gòu)程序設(shè)計(jì)十分不同的思維方式。因此,學(xué)習(xí)C++語言面臨兩個(gè)問題,如何建立面向?qū)ο蟮乃季S方式?如何用C++語言編程?亦即需要學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)方法和使用C++語言的編程方法。
1.1面向?qū)ο蟮哪繕?biāo)傳統(tǒng)的程序設(shè)計(jì)方法是模塊化(或結(jié)構(gòu)化)的程序設(shè)計(jì)方法,步驟為:(1)整個(gè)軟件系統(tǒng)功能逐步細(xì)化為多個(gè)小的功能—功能劃分;(2)多個(gè)小的功能對應(yīng)由一個(gè)模塊(如函數(shù),過程,分程序,子程序等)來實(shí)現(xiàn);(3)多個(gè)模塊合作完成較大的功能,所有模塊的合作完成整個(gè)軟件系統(tǒng)的功能。對于傳統(tǒng)的程序設(shè)計(jì),在設(shè)計(jì)和實(shí)現(xiàn)(編程)階段考慮的是模塊,程序本身也是由模塊構(gòu)成的,稱之為面向模塊(面向過程)。
面向?qū)ο蟮哪繕?biāo)歸納為:對試圖利用計(jì)算機(jī)進(jìn)行問題求解和信息處理的領(lǐng)域,盡量使用對象的概念,將問題空間中的現(xiàn)實(shí)模型映射到程序空間,由此所得到的自然性可望克服軟件系統(tǒng)的復(fù)雜性,從而得到問題求解和信息處理的更高性能。1.2面向?qū)ο笳Z言的核心概念數(shù)據(jù)類型是一個(gè)抽象的概念,包含有一組數(shù)據(jù)的定義和一組對該組數(shù)據(jù)操作的定義。數(shù)據(jù)類型分為三種:簡單數(shù)據(jù)類型,用戶定義數(shù)據(jù)類型,抽象數(shù)據(jù)類型。簡單數(shù)據(jù)類型:語言本身提供的,如整型,包含有所有的整數(shù)和對整數(shù)的操作,對于一個(gè)整數(shù)的成分(二進(jìn)制表示)是不可見的,也不可直接操作。內(nèi)部類型基本類型:char,int,float,void派生類型:格式:<類型修飾符>基本類型類型修飾符:short,long,singed,unsigned,double例:long(int),double(float),longdouble(float),…bool類型用戶定義數(shù)據(jù)類型:以簡單數(shù)據(jù)類型為基礎(chǔ),它包含的數(shù)據(jù)成分是多個(gè)簡單數(shù)據(jù)類型的數(shù)據(jù),可以對數(shù)據(jù)成分進(jìn)行直接操作。自定義類型使用typedef格式:typedef<已聲明的類型><新類型名>例如:typedefunsignedcharUCHAR
typedefunsignedlongDWORD枚舉類型格式:
enum<枚舉類型名>{<枚舉值表>}[<枚舉變量表>];例:
enumweekday{
MON=1,TUR,WED,THU,FRI,SAT,SUN
}nowday,oldday;class,struct,union在高級程序設(shè)計(jì)語言的程序中,對于簡單的和用戶定義數(shù)據(jù)類型,數(shù)據(jù)的定義和操作是分開的,只是在對數(shù)據(jù)進(jìn)行操作時(shí),需檢查該操作是否符合對應(yīng)的類型允許的操作(即類型檢查)。對于類型的使用,必須通過類型的實(shí)際例子(簡稱實(shí)例或?qū)嶓w,即原來所說的變量或常量)的使用來體現(xiàn)。
例如:
intnum;抽象數(shù)據(jù)類型:在定義數(shù)據(jù)時(shí),必須同時(shí)定義對數(shù)據(jù)的操作;它的成分(簡單的或用戶定義的數(shù)據(jù)類型的數(shù)據(jù))是不可見的,也不可直接操作,必須通過類型提供的操作進(jìn)行訪問。面向?qū)ο笳Z言中的對象是“將某組數(shù)據(jù)和使用該組數(shù)據(jù)的一組基本操作或過程封裝在一起,而成的一個(gè)實(shí)體”。實(shí)際上就是抽象數(shù)據(jù)類型的一個(gè)實(shí)例。對象和抽象數(shù)據(jù)類型的關(guān)系,就像整型變量和整型數(shù)據(jù)類型的關(guān)系。作為克服軟件復(fù)雜性的手段,在面向?qū)ο笾?,利用了如下對象的性質(zhì):(1)將密切相關(guān)的數(shù)據(jù)和操作封裝起來定義為一個(gè)實(shí)體。(2)定義了一個(gè)實(shí)體后,即使不知道此實(shí)體的功能是怎樣實(shí)現(xiàn)的,也能使用它們(這一點(diǎn)類似于庫函數(shù))。1.2.1數(shù)據(jù)封裝面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,最核心的概念是數(shù)據(jù)封裝、繼承性和多態(tài)性。抽象是指對于一個(gè)系統(tǒng)的簡化描述。對于使用系統(tǒng)的人員,不會去關(guān)心該系統(tǒng)的組成和工作的原理;他們所關(guān)心的是該系統(tǒng)具有什么樣的功能,如何去使用該系統(tǒng)(既系統(tǒng)提供什么樣的接口,讓人們使用)。抽象的原則,運(yùn)用在計(jì)算機(jī)領(lǐng)域,稱之為“信息隱蔽”原則;在面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,使用數(shù)據(jù)封裝機(jī)制實(shí)現(xiàn)信息隱蔽。數(shù)據(jù)封裝將一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的操作集合封裝在一起,形成一個(gè)能動(dòng)的實(shí)體,稱為對象。用戶不必知道對象行為的實(shí)現(xiàn)細(xì)節(jié),只需根據(jù)對象提供的外部特性接口訪問對象。例
classCircle{floatr;//半徑
intx,y;//圓心關(guān)于半徑、圓心和圓的操作;
};類的概念將一組數(shù)據(jù)和這組數(shù)據(jù)有關(guān)的操作集合封裝在一起,建立了一個(gè)定義良好的接口,人們只關(guān)心其使用,不關(guān)心其實(shí)現(xiàn)細(xì)節(jié)。這反應(yīng)了抽象數(shù)據(jù)類型的思想。類本身還是一組對象共同屬性和操作的抽象。類代表了一般性,而該類的每一個(gè)對象代表了具體性。1.2.2繼承繼承是面向?qū)ο笳Z言的另一個(gè)重要的概念。在客觀世界中,存在著整體和部分的關(guān)系(apartof)、一般和特殊的關(guān)系(isa或
akindof),實(shí)現(xiàn)了重用性和擴(kuò)充性。Aisapartof
B.AisakindofB.例:人與學(xué)生的關(guān)系(繼承)點(diǎn)與圓(心)的關(guān)系(包含)點(diǎn)與多邊形(頂點(diǎn))的關(guān)系將一個(gè)人當(dāng)成對象,對于人的定義(如名字、年齡、性別等等)和對人的操作(取名字、打印一個(gè)人的各種信息等等)已經(jīng)封裝在Person類中了;下面將學(xué)生當(dāng)成對象,學(xué)生是一類特殊的人,基本的信息和操作已經(jīng)Person中定義過了,為了避免重復(fù)定義C++允許用戶將學(xué)生類Student說明為Person類的繼承類。personstudent這樣,Student類就可以不必在考慮對于人的基本信息的定義和操作了,繼承機(jī)制允許學(xué)生類從人類中繼承人的所有數(shù)據(jù)和操作,學(xué)生類只需要考慮學(xué)生特殊的信息的定義和對學(xué)生本身的操作即可。1.2.3多態(tài)性
面向?qū)ο罅硗庖粋€(gè)核心概念是多態(tài)性。所謂多態(tài),是指一個(gè)名字(或符號)具有多種含義。利用超載(或稱為重載overload)方式實(shí)現(xiàn)多態(tài)性。有函數(shù)和運(yùn)算符超載。
函數(shù)的名字有兩個(gè)作用:
1)代表了該函數(shù)的函數(shù)體(那段代碼);
2)代表了該函數(shù)的功能。
在傳統(tǒng)的語言中,不允許函數(shù)有同名的情況,考慮的是函數(shù)名的第一個(gè)作用;而在面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,如果發(fā)現(xiàn)多個(gè)函數(shù)的功能是一致的,盡管他們確實(shí)是不同的函數(shù),但允許它們具有相同的函數(shù)名字,即存在同名函數(shù)。
對于函數(shù)重載,若函數(shù)調(diào)用(界面)與哪一個(gè)函數(shù)體(函數(shù)實(shí)現(xiàn))相匹配,是在編譯時(shí)確定的,稱為早期匹配(或靜態(tài)聯(lián)編)。如果函數(shù)調(diào)用與哪一個(gè)函數(shù)體的匹配是在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行的,稱之為晚期匹配(或動(dòng)態(tài)聯(lián)編)。一般來說,早期匹配執(zhí)行速度比較快,晚期匹配提供靈活性和高度的問題抽象。
1.3按對象方式思維
面向?qū)ο蟮腃RC方法從以下三個(gè)方面來表述對象。⑴Classname(對象取名)對象取名實(shí)質(zhì)上就是將系統(tǒng)的功能進(jìn)行劃分。⑵Responsibilities(責(zé)任)每個(gè)對象只負(fù)責(zé)完成設(shè)計(jì)中的一個(gè)小目標(biāo)的功能。⑶Collaborators(合作者)每個(gè)對象可能會依賴其他對象來完成其責(zé)任。這個(gè)對象所依賴的對象集合稱為它的合作者。對象的合作關(guān)系有:
包含、繼承、友元、使用
如何判定“是否已經(jīng)找到合適的對象”,沒有一定的準(zhǔn)則。
1.4面向?qū)ο蟮乃枷牒头椒?/p>
1.4.1面向?qū)ο笫且环N認(rèn)知方法學(xué)認(rèn)知方法:從一般到特殊的演繹方法從特殊到一般的歸納方法。面向?qū)ο筇峁┝藦囊话愕教厥獾难堇[手段,又提供了從特殊到一般的歸納形式,從而說明它是一種很好的認(rèn)知方法。這種分類、歸納的方法在面向?qū)ο笤O(shè)計(jì)技術(shù)中是很重要的。1.4.2面向?qū)ο笈c軟件
IC“軟件
IC”:一種軟件集成機(jī)制,可以將已經(jīng)成熟的軟件單元制成一個(gè)相對獨(dú)立的實(shí)體,使它們可以不加改動(dòng)或很少改動(dòng)就可以應(yīng)用于新的軟件系統(tǒng)中。“軟件IC”是一種可重用模塊。
類概念支持
“軟件
IC”
技術(shù):在面向?qū)ο笳Z言中,類充當(dāng)了系統(tǒng)構(gòu)造的單元,這是因?yàn)樗哂幸韵绿攸c(diǎn):
類是一類對象的統(tǒng)一模板,它具有很強(qiáng)的模塊性。類的功能代碼實(shí)現(xiàn)只通過外部接口與外界聯(lián)系,具有很強(qiáng)的獨(dú)立性。
類的可靠性表現(xiàn)在一個(gè)類的出錯(cuò)不會傳播到其他類中,一個(gè)系統(tǒng)的類如果出錯(cuò),可以將其刪除,作為一個(gè)降級的系統(tǒng)使用,而不會使整個(gè)系統(tǒng)癱瘓。類是對象一級的抽象,它將一類對象的數(shù)據(jù)結(jié)構(gòu)和功能實(shí)現(xiàn)封裝起來,使得外界不必清楚其內(nèi)部實(shí)現(xiàn),只要從它的說明中了解其基本功能就可以使用它。
類之間的連接只有繼承性描述和一組外協(xié)消息,因而清晰、明了。1.4.3面向?qū)ο蠓椒ㄅc結(jié)構(gòu)程序設(shè)計(jì)方法1.模塊與對象
結(jié)構(gòu)化程序設(shè)計(jì)中,模塊是對功能的抽象。而對象是包括數(shù)據(jù)、操作的整體,將數(shù)據(jù)和功能的抽象和統(tǒng)一??梢哉f,對象包含了模塊。2.過程調(diào)用與消息傳遞
在結(jié)構(gòu)化程序設(shè)計(jì)中,過程為一獨(dú)立實(shí)體,顯式地被它的使用者所見,而且,對于相同的輸入?yún)?shù),每一次過程調(diào)用,其輸出結(jié)果是相同的。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對象是一臺自動(dòng)機(jī),對象的狀態(tài)只能由對象的操作改變它。C++語言用函數(shù)實(shí)現(xiàn)操作。每當(dāng)需要改變狀態(tài)的時(shí)候,只能由其他對象向該對象發(fā)送消息(在C++中,借助于成員函數(shù)調(diào)用來實(shí)現(xiàn)消息發(fā)送)。對象響應(yīng)消息后,按照消息模式找出匹配的操作,并執(zhí)行該操作。應(yīng)該注意,發(fā)送消息和過程調(diào)用的意義是不同的,發(fā)送消息只是觸發(fā)自動(dòng)機(jī),同樣的輸入?yún)?shù),可能因自動(dòng)機(jī)狀態(tài)不同,其輸出結(jié)果也不同。1.4.4對象是抽象數(shù)據(jù)類型的實(shí)現(xiàn)抽象是一個(gè)系統(tǒng)的簡化描述,它強(qiáng)調(diào)了系統(tǒng)的某些特性而忽略了其他特性。對于用戶來說,所關(guān)心的是程序能做什么,而不是它的實(shí)現(xiàn)細(xì)節(jié)。而抽象恰好可以用來對用戶所關(guān)心的重要信息予以強(qiáng)調(diào),而忽略不重要的信息。整個(gè)程序設(shè)計(jì)語言的發(fā)展過程就是抽象層次不斷提高的過程。抽象數(shù)據(jù)類型在程序中是一封閉的單位。它包含的信息有:外部可見的:處理數(shù)據(jù)的各個(gè)操作的界面外部不可見的:數(shù)據(jù)和操作的實(shí)現(xiàn)細(xì)節(jié)于是,將數(shù)據(jù)類型抽象為提供給外部世界的數(shù)據(jù)和操作集。使用了抽象數(shù)據(jù)類型描述,不再關(guān)心數(shù)據(jù)結(jié)構(gòu)是什么,而僅僅關(guān)心它具有些什么功能可用。這與信息隱藏原則很符合。
1.6面向?qū)ο蟮某绦蛟O(shè)計(jì)語言將面向?qū)ο蟮母拍钫阶鳛檎Z言成分的是Simula67。Simula語言在
ALGOL60語言的基礎(chǔ)上發(fā)展起來,引入了類、對象、繼承和共行子程序等概念。當(dāng)今
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年廣東省佛山市順德區(qū)桂洲、文德等校高一化學(xué)11月期中聯(lián)考試卷
- 2025-2030年中國光耦合器金屬陶瓷項(xiàng)目投資可行性研究分析報(bào)告
- 果林轉(zhuǎn)讓合同范本
- 汽車違約合同范本
- Unit 6 Is he your grandpa 第一課時(shí) (教學(xué)設(shè)計(jì)) -2024-2025學(xué)年譯林版(三起)(2024)英語三年級上冊
- 2025代持股權(quán)轉(zhuǎn)讓與業(yè)績補(bǔ)償協(xié)議
- Unit 2 Plant a Plant!Lesson12教學(xué)設(shè)計(jì) -2024-2025學(xué)年冀教版英語八年級下冊
- 2025-2030年中國高速調(diào)制解調(diào)器行業(yè)深度研究分析報(bào)告
- 2024年DHA藻油市場分析報(bào)告
- 2025年度新型建筑腳手架租賃與維護(hù)服務(wù)合同
- 大學(xué)轉(zhuǎn)專業(yè)高等數(shù)學(xué)試卷
- DBJ51-T 198-2022 四川省既有民用建筑結(jié)構(gòu)安全隱患排查技術(shù)標(biāo)準(zhǔn)
- 公司廠區(qū)保潔培訓(xùn)
- 江蘇省招標(biāo)中心有限公司招聘筆試沖刺題2025
- 2024年防盜門銷售合同范本
- 支付令申請書(2025版)
- 麻醉護(hù)士的 工作職責(zé)
- 2025年中考語文一輪復(fù)習(xí):九年級下冊知識點(diǎn)梳理
- 旅游健康與保健知識
- 亞朵酒店前臺述職報(bào)告
- 《肝衰竭診治指南(2024版)》解讀
評論
0/150
提交評論