C++語言教程:第一章 引論_第1頁
C++語言教程:第一章 引論_第2頁
C++語言教程:第一章 引論_第3頁
C++語言教程:第一章 引論_第4頁
C++語言教程:第一章 引論_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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è)小的功能對(duì)應(yīng)由一個(gè)模塊(如函數(shù),過程,分程序,子程序等)來實(shí)現(xiàn);(3)多個(gè)模塊合作完成較大的功能,所有模塊的合作完成整個(gè)軟件系統(tǒng)的功能。對(duì)于傳統(tǒng)的程序設(shè)計(jì),在設(shè)計(jì)和實(shí)現(xiàn)(編程)階段考慮的是模塊,程序本身也是由模塊構(gòu)成的,稱之為面向模塊(面向過程)。

面向?qū)ο蟮哪繕?biāo)歸納為:對(duì)試圖利用計(jì)算機(jī)進(jìn)行問題求解和信息處理的領(lǐng)域,盡量使用對(duì)象的概念,將問題空間中的現(xiàn)實(shí)模型映射到程序空間,由此所得到的自然性可望克服軟件系統(tǒng)的復(fù)雜性,從而得到問題求解和信息處理的更高性能。1.2面向?qū)ο笳Z言的核心概念數(shù)據(jù)類型是一個(gè)抽象的概念,包含有一組數(shù)據(jù)的定義和一組對(duì)該組數(shù)據(jù)操作的定義。數(shù)據(jù)類型分為三種:簡單數(shù)據(jù)類型,用戶定義數(shù)據(jù)類型,抽象數(shù)據(jù)類型。簡單數(shù)據(jù)類型:語言本身提供的,如整型,包含有所有的整數(shù)和對(duì)整數(shù)的操作,對(duì)于一個(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ù),可以對(duì)數(shù)據(jù)成分進(jìn)行直接操作。自定義類型使用typedef格式:typedef<已聲明的類型><新類型名>例如:typedefunsignedcharUCHAR

typedefunsignedlongDWORD枚舉類型格式:

enum<枚舉類型名>{<枚舉值表>}[<枚舉變量表>];例:

enumweekday{

MON=1,TUR,WED,THU,FRI,SAT,SUN

}nowday,oldday;class,struct,union在高級(jí)程序設(shè)計(jì)語言的程序中,對(duì)于簡單的和用戶定義數(shù)據(jù)類型,數(shù)據(jù)的定義和操作是分開的,只是在對(duì)數(shù)據(jù)進(jìn)行操作時(shí),需檢查該操作是否符合對(duì)應(yīng)的類型允許的操作(即類型檢查)。對(duì)于類型的使用,必須通過類型的實(shí)際例子(簡稱實(shí)例或?qū)嶓w,即原來所說的變量或常量)的使用來體現(xiàn)。

例如:

intnum;抽象數(shù)據(jù)類型:在定義數(shù)據(jù)時(shí),必須同時(shí)定義對(duì)數(shù)據(jù)的操作;它的成分(簡單的或用戶定義的數(shù)據(jù)類型的數(shù)據(jù))是不可見的,也不可直接操作,必須通過類型提供的操作進(jìn)行訪問。面向?qū)ο笳Z言中的對(duì)象是“將某組數(shù)據(jù)和使用該組數(shù)據(jù)的一組基本操作或過程封裝在一起,而成的一個(gè)實(shí)體”。實(shí)際上就是抽象數(shù)據(jù)類型的一個(gè)實(shí)例。對(duì)象和抽象數(shù)據(jù)類型的關(guān)系,就像整型變量和整型數(shù)據(jù)類型的關(guān)系。作為克服軟件復(fù)雜性的手段,在面向?qū)ο笾?,利用了如下?duì)象的性質(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)性。抽象是指對(duì)于一個(gè)系統(tǒng)的簡化描述。對(duì)于使用系統(tǒng)的人員,不會(huì)去關(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í)體,稱為對(duì)象。用戶不必知道對(duì)象行為的實(shí)現(xiàn)細(xì)節(jié),只需根據(jù)對(duì)象提供的外部特性接口訪問對(duì)象。例

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ù)類型的思想。類本身還是一組對(duì)象共同屬性和操作的抽象。類代表了一般性,而該類的每一個(gè)對(duì)象代表了具體性。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)成對(duì)象,對(duì)于人的定義(如名字、年齡、性別等等)和對(duì)人的操作(取名字、打印一個(gè)人的各種信息等等)已經(jīng)封裝在Person類中了;下面將學(xué)生當(dāng)成對(duì)象,學(xué)生是一類特殊的人,基本的信息和操作已經(jīng)Person中定義過了,為了避免重復(fù)定義C++允許用戶將學(xué)生類Student說明為Person類的繼承類。personstudent這樣,Student類就可以不必在考慮對(duì)于人的基本信息的定義和操作了,繼承機(jī)制允許學(xué)生類從人類中繼承人的所有數(shù)據(jù)和操作,學(xué)生類只需要考慮學(xué)生特殊的信息的定義和對(duì)學(xué)生本身的操作即可。1.2.3多態(tài)性

面向?qū)ο罅硗庖粋€(gè)核心概念是多態(tài)性。所謂多態(tài),是指一個(gè)名字(或符號(hào))具有多種含義。利用超載(或稱為重載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ù)。

對(duì)于函數(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按對(duì)象方式思維

面向?qū)ο蟮腃RC方法從以下三個(gè)方面來表述對(duì)象。⑴Classname(對(duì)象取名)對(duì)象取名實(shí)質(zhì)上就是將系統(tǒng)的功能進(jìn)行劃分。⑵Responsibilities(責(zé)任)每個(gè)對(duì)象只負(fù)責(zé)完成設(shè)計(jì)中的一個(gè)小目標(biāo)的功能。⑶Collaborators(合作者)每個(gè)對(duì)象可能會(huì)依賴其他對(duì)象來完成其責(zé)任。這個(gè)對(duì)象所依賴的對(duì)象集合稱為它的合作者。對(duì)象的合作關(guān)系有:

包含、繼承、友元、使用

如何判定“是否已經(jīng)找到合適的對(duì)象”,沒有一定的準(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è)相對(duì)獨(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):

類是一類對(duì)象的統(tǒng)一模板,它具有很強(qiáng)的模塊性。類的功能代碼實(shí)現(xiàn)只通過外部接口與外界聯(lián)系,具有很強(qiáng)的獨(dú)立性。

類的可靠性表現(xiàn)在一個(gè)類的出錯(cuò)不會(huì)傳播到其他類中,一個(gè)系統(tǒng)的類如果出錯(cuò),可以將其刪除,作為一個(gè)降級(jí)的系統(tǒng)使用,而不會(huì)使整個(gè)系統(tǒng)癱瘓。類是對(duì)象一級(jí)的抽象,它將一類對(duì)象的數(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.模塊與對(duì)象

結(jié)構(gòu)化程序設(shè)計(jì)中,模塊是對(duì)功能的抽象。而對(duì)象是包括數(shù)據(jù)、操作的整體,將數(shù)據(jù)和功能的抽象和統(tǒng)一。可以說,對(duì)象包含了模塊。2.過程調(diào)用與消息傳遞

在結(jié)構(gòu)化程序設(shè)計(jì)中,過程為一獨(dú)立實(shí)體,顯式地被它的使用者所見,而且,對(duì)于相同的輸入?yún)?shù),每一次過程調(diào)用,其輸出結(jié)果是相同的。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象是一臺(tái)自動(dòng)機(jī),對(duì)象的狀態(tài)只能由對(duì)象的操作改變它。C++語言用函數(shù)實(shí)現(xiàn)操作。每當(dāng)需要改變狀態(tài)的時(shí)候,只能由其他對(duì)象向該對(duì)象發(fā)送消息(在C++中,借助于成員函數(shù)調(diào)用來實(shí)現(xiàn)消息發(fā)送)。對(duì)象響應(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對(duì)象是抽象數(shù)據(jù)類型的實(shí)現(xiàn)抽象是一個(gè)系統(tǒng)的簡化描述,它強(qiáng)調(diào)了系統(tǒng)的某些特性而忽略了其他特性。對(duì)于用戶來說,所關(guān)心的是程序能做什么,而不是它的實(shí)現(xiàn)細(xì)節(jié)。而抽象恰好可以用來對(duì)用戶所關(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ā)展起來,引入了類、對(duì)象、繼承和共行子程序等概念。當(dāng)今

溫馨提示

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

評(píng)論

0/150

提交評(píng)論