版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第13秦C列C+第13章C到C+131面向?qū)ο蠹夹g(shù)13.2改進(jìn)的C語言13.3 C+的輸入與輸出134類與對象13.5程序設(shè)計(jì)舉例第13傘5 C+13.1面向?qū)ο蠹夹g(shù)13.1.1面向?qū)ο蠹夹g(shù)的由來和發(fā)展面向?qū)€技術(shù)產(chǎn)住的IY景與結(jié)構(gòu)化程序設(shè)計(jì)方法 產(chǎn)生的背景類似,而向?qū)﹀璩绦蛟O(shè)計(jì)方法(OOP)是 在結(jié)構(gòu)化程序設(shè)訃方法的肚礎(chǔ)上發(fā)展而來的。131 5 C+13.1.2面向?qū)ο蠹夹g(shù)的兩大要素1 對象從概念上講.對彖代表著正在創(chuàng)建系統(tǒng)小的個(gè)實(shí)體。從形式上講,對彖是待處理的程序單元,是數(shù)據(jù)和方 法的封裝體。在C+中是數(shù)據(jù)成員和成員函數(shù)的封裝體。方法曲若I操作構(gòu)成。對象實(shí)現(xiàn)了信息隱藏,方法的 具體實(shí)現(xiàn)外部
2、是不可見的,封裝的11的足阻止卜法訪問。 對象通過消息與另一個(gè)對象傳遞信息。消息與方法-對 應(yīng),在C+中,消息就是成員函數(shù)的調(diào)丿lh13 5 C+2類類是對象的抽象及描述,是創(chuàng)建對象的樣板,它 包含著一類對象的數(shù)據(jù)描述和方法定義。一個(gè)類的所有對象部令相同的數(shù)據(jù)結(jié)構(gòu),共享相 同的方法,而各個(gè)對彖仃各口不同的狀態(tài),類是所仃 對彖的共同行為和不同狀態(tài)的集合。由個(gè)特定的類所創(chuàng)建的對彖稱為這個(gè)類的實(shí)例。第13傘5C+13.1.3面向?qū)ο蠹夹g(shù)的三大機(jī)制1 封裝封裝的對象是數(shù)據(jù)和方法,支持?jǐn)?shù)據(jù)封裝就是支持 數(shù)據(jù)抽象。在C+中,類是支持?jǐn)?shù)據(jù)封裝的匚具,對象則 是數(shù)據(jù)封裝的實(shí)現(xiàn)。沒冇封裝,就沒冇面向?qū)ο蠹夹g(shù)。另
3、外,封裝還提供種對數(shù)據(jù)訪問嚴(yán)格控制的機(jī)制。 因此,數(shù)據(jù)將被隱藏在封裝體中,該封裝體通過操作接 口與外界交換信息。第13傘C釗C+2.繼承類提供r說明一組對彖結(jié)構(gòu)的機(jī)制。借助繼承這一重 要機(jī)制,已存在的類八有建立了類的能力,進(jìn)而建立類的層 次,擴(kuò)充類的定義。繼承提供了創(chuàng)建新類的種方法,個(gè)新類可以通過對 己冇類進(jìn)行修改和擴(kuò)充來定義。從-個(gè)類繼承定義的新類, 將繼承已有類的方法和屬件,并【.可添加不包含在父類中的 新方法和屈性。繭類被稱為(2有類的(類,乂稱為派生類, 已有類稱為新類的父類,又稱為基類。C卄屮允許單繼承和多繼承,一個(gè)類可以根據(jù)盂要生成 派生類。_3.多態(tài)多態(tài)是指相同的語法結(jié)構(gòu)可以代表
4、不同類型的實(shí)體或 苦對不同類型的實(shí)體進(jìn)行操作,即發(fā)出同樣的消息被不同 對彖接收時(shí)導(dǎo)致完全不同的行為。C+允許函數(shù)名和運(yùn)算符魚載,允許一個(gè)相同的標(biāo)識(shí)符 或運(yùn)算符代表參個(gè)不同實(shí)現(xiàn)的函數(shù),這是編譯時(shí)的多態(tài)性。C+屮可以定義熄兩數(shù),通過定義虛曲數(shù)來支持動(dòng)態(tài)聯(lián) 編。動(dòng)態(tài)聯(lián)編是另一類重要的多態(tài)性,箔態(tài)性形成由父類 和它們的了類組成的個(gè)樹型結(jié)構(gòu)。在這個(gè)樹中的每個(gè) 子類可接收一個(gè)或多個(gè)具有相同名字的消息。當(dāng)一個(gè)消息 被這個(gè)樹中一個(gè)類的一個(gè)對象接收時(shí),這個(gè)對象動(dòng)態(tài)地決 定豈多態(tài)性。第13拿5 C+13.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)方法是口前最先進(jìn)的程用設(shè)計(jì)方 法。面向?qū)ο蟪绦蛟O(shè)計(jì)模擬人類認(rèn)識(shí)問題較高
5、.較廣層次 的過程。結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)功能抽象,程序的模塊化, 基功能進(jìn)行模塊分解;而向?qū)ο蟪绦蛟O(shè)計(jì)以數(shù)據(jù)抽象為 基礎(chǔ),綜合了功能抽象和數(shù)據(jù)抽象,基于數(shù)據(jù)抽象進(jìn)行模 塊分解。第13章5 C+13.2改進(jìn)的C語言13.2.1 C+程序1.C+程序一般結(jié)構(gòu)/c-M-ftir的簡單實(shí)例# include *riostream.irmain ()(doublex y:COUIVV請輸入兩個(gè)數(shù):cinxy:double z:z=x+y:coin vC+y=v Window及Help 9 個(gè)菜 單項(xiàng)。13f 5 C+圖 13- I第13勒5 C+2)編譯連接和運(yùn)行源程序選擇菜單項(xiàng)Build,出現(xiàn)Build
6、的下拉式菜單,在該下拉 式菜屮選擇Compile 菜單項(xiàng),這時(shí)系統(tǒng)開始對當(dāng) 詢的源程序進(jìn)行編譯。在編譯的過程中,將所發(fā)現(xiàn)的錯(cuò)誤 顯示在屏幕下方的“Build窗口中。所顯示的出錯(cuò)信息指 出該錯(cuò)誤所在的行號(hào)和該錯(cuò)浜的性質(zhì),程序員可根據(jù)這吃 信息采用全屏幕編輯方式修改程序。當(dāng)用鼠標(biāo)雙擊出錯(cuò)信 息提示行時(shí),該錯(cuò)誤信息對應(yīng)的行將加亮顯示,或在該行 前而用一個(gè)箭頭加以指示。往往因?yàn)橐粋€(gè)錯(cuò)謀而出現(xiàn)多行 出錯(cuò)信息,因此,常常在修改一條錯(cuò)謀后,再迪新編譯, 如果有錯(cuò)誤,再繼續(xù)修改,宜到?jīng)]有錯(cuò)誤為止。第13勒5 C+在沒有錯(cuò)誤時(shí),顯示錯(cuò)謀信息的窗I丨內(nèi)將顯示如 下信息:*.obj-0 error (s) , 0
7、warning (s)編譯無錯(cuò)誤后,再進(jìn)行連接。這時(shí)選擇“Build菜 單中的“Build *exe/z選項(xiàng)。同樣,對出現(xiàn)的錯(cuò)誤 要根據(jù)出錯(cuò)信息行屮顯示內(nèi)容進(jìn)彳亍修改,直到編譯連 接無錯(cuò)誤為止。這時(shí),在“Build窗口會(huì)顯示如下信息:*.exe-0error (s) 0 warning (s)1322常規(guī)改進(jìn)1新增的關(guān)鍵字asmcatchclassdelete friendinlinenewoperatorprivateprotectedpublic templatethisvirtual第13章C列C+2 注釋即用“/導(dǎo)引出單行注釋當(dāng)然,C中原有的 /*和*/注釋方法,仍可使用,并且常用于多
8、行注釋 情況。3 類型轉(zhuǎn)換O+支持兩種不同的類型轉(zhuǎn)換形式:ini i=0;long 1= (long) i: C的類型轉(zhuǎn)換long m=long (i) : C+的新風(fēng)格C+新風(fēng)格的類型轉(zhuǎn)換形式看上去像是一個(gè)函數(shù)調(diào)用, 所以可讀性較好。而且,這種形式也適合于用八定義類型 的轉(zhuǎn)換(用定義函數(shù)來實(shí)現(xiàn))。第13勒5 C+4 靈活的聲明5 constC+中,類型限定符constJIJ來表示常量,所以, C+中的常就可以是有類型的,程序員不必再用# define創(chuàng)建無類型常量。例如:const int size=IOO;聲明成const的變量,實(shí)際是常量,在程序中是用 任何方法不可修改的。ANSI C從
9、C卄中借用rconst的概念,但實(shí)現(xiàn)方法 有所不同。第13傘5 C+6、structC+的struct的標(biāo)識(shí)符4看作是類型名,所以定義某 個(gè)struct變量比C中更加直觀。例如,在C中:struct point int x; int y):struct point p:而在C卄中:struct point int x: int y|:point p;union的情況也是如此。為了保持兼容性,C+仍然接受老用法。在后面會(huì)看到, C+的類就是對C中strucl的擴(kuò)充。7.作用域分辨運(yùn)算符“:”“:”是作用域分辨運(yùn)算符,它用于訪問在為前作 用域中被隱藏的數(shù)據(jù)項(xiàng)。例如:int a:int main (
10、)(float a:a=l.5; 訪問十詢作用域的a:a=2: /訪問全局域的a13.23 C+的動(dòng)態(tài)內(nèi)存分配C程用中,動(dòng)態(tài)內(nèi)心分配是通過調(diào)用諸如malloc()和free ()等庫函數(shù)來實(shí)現(xiàn),而C+給出了川new和delete運(yùn)舁符進(jìn)行動(dòng)態(tài)內(nèi)存分呢的新方法。第13傘5 C+第 13* 5 C+13.2.4引用引入引用機(jī)制后,可有如卜C+程序:void swapinl (int &a* ini &b) 農(nóng)示引用,類似 f pascal 中變參(int (cinp=a:a=b; b=tcmp:第13章C列C+調(diào)用該函數(shù)的C+方法為:swapint (x y):運(yùn)算符“&表示引用,可以把參數(shù)樂b看
11、作是調(diào)用實(shí) 參的別名,C+自動(dòng)把x、 y的地址作為參數(shù)傳遞給 swapint ()函數(shù),形參與實(shí)參共享存儲(chǔ)單元。當(dāng)人的結(jié)構(gòu)(如用戶定義類的對象)被傳遞給函數(shù)時(shí), 使川引川參數(shù)可使得參數(shù)傳遞效率得到提烏。若不需改變 參數(shù)的值,可Jllconst對參數(shù)說明加以限定,從而保護(hù)數(shù)據(jù) 的安全性。例如:void geldata (const int & data)13.2.5 C+中的函數(shù)1. main ()C并無特別規(guī)定main ()函數(shù)的格式,因?yàn)橥?常并不關(guān)心返回何種狀態(tài)給操作系統(tǒng)。然而,C+卻 要求main ()函數(shù)匹配下面兩種原型之_:Void main ()int main (int argc
12、. char*argv )第 13* 5 C+2.函數(shù)原型函數(shù)原型(prototyping)的概念在前血章節(jié)C提及, 其實(shí)ANSI C正是從C卄中借用了這做法。函數(shù)原型實(shí) 際上就是対函數(shù)的頭格式進(jìn)彳J:說明,包含函數(shù)名、參數(shù) 及返回值類型。傳統(tǒng)C中的函數(shù)說明只是定義函數(shù)的返回值的類型, 并不涉及參數(shù),如:int something ():而在C+屮的函數(shù)說明應(yīng)是詳細(xì)的頭格式:int something (char*str, unsigned int len):第13車5C+3 內(nèi)聯(lián)函數(shù)當(dāng)函數(shù)定義是lhinline開頭時(shí),表明此函數(shù)為內(nèi)聯(lián) 函數(shù)。編譯后,它不是單獨(dú)段可調(diào)用的代碼,而是 被插入在對
13、該函數(shù)的毎次調(diào)川處,從而完成與函數(shù) 調(diào)用柑同的功能。例如:inline int sum (int a, int b)return a+b: 這樣函數(shù)調(diào)用無需棧,代碼重用。第13傘5 C+4缺省參數(shù)值void delay (int Ioops= 1(X)0): 網(wǎng)數(shù)原型,給出缺省的參數(shù)值void delay (ini loops) 函數(shù)運(yùn)義(for (int i=0: i complex c2)complex t;t.r=c I.r+c2.r:t.i=c I.i+c2.i:return (t);第13傘5 C+JIJoperatorJT;跟運(yùn)算符號(hào)來定義帀載運(yùn)算符函數(shù)。 重載運(yùn)算符的使用,如同運(yùn)
14、算符原來的使用規(guī)則。 例如:complex x, y. sum:sum=x+y :顯然,通過重載,C+的語旬史易丁理解。第13秦5 C+13.3 C+的輸入與輸出133.1 C+流類結(jié)構(gòu)1. iostream庫iostrca m庫中具有streambuf和ios兩個(gè)平彳f的類,這 都是基木的類,分別完成不同的匸作。streambuf類提供 基本流操作,但不提供格式支持。類ios為格式化I/O提 供基本操作。2 標(biāo)準(zhǔn)流iostrcam.h說明 了 標(biāo)準(zhǔn)流對象cin、cout ccrr 與clog。在包含iostrcam.h以看,這些流對象就C經(jīng)自動(dòng)建立并打 開f o cin是標(biāo)準(zhǔn)輸入流,對應(yīng)于C
15、的stdin; coul是標(biāo)準(zhǔn) 輸出流,對應(yīng)的stdout; ccn和clog流被連到標(biāo)準(zhǔn)輸出 h對應(yīng)J C的stderr。cerr和clog之間的IX別是cerr沒冇緩 沖,發(fā)送給它的任何輸出立即被執(zhí)行,而clog只有、“|緩 沖區(qū)滿時(shí)才有輸出。缺省時(shí),C+標(biāo)準(zhǔn)流被連到控制臺(tái) 上。第13傘5 C+13.3.2基本I/O操作1 輸出一入符“vv 的左操作數(shù)為標(biāo)準(zhǔn)輸出流對象,右操作數(shù)為 待輸出的某類型值。例如:coutwHello! nw; 輸出Hello!,并換彳j:這時(shí)“vv為7申或char*插入符。插入運(yùn)算符返回所 調(diào)用的ostream對象的引用,由于為左結(jié)合,所以可以 連寫。第13秦5
16、C+2.輸入一提取符“、 的左操作數(shù)為標(biāo)準(zhǔn)輸入流,右操作數(shù)為行輸 入量。它比scanf ()函數(shù)更緊湊,且可讀性更好,也不 易出錯(cuò)。例如:cinx:從cin輸入值到x。注意它與scanf ()函數(shù)不同,x前并沒 何地址運(yùn)算符,與插入符類似,提取符“也支持連 寫。 程序員可以為自己定義的類(型)雄立相應(yīng)的 插入和提取函數(shù)。第13車5 C+13.3.3格式化I/O1用iOS成員函數(shù)進(jìn)行格式化Eiostream. h中,冇如下有關(guān)格式化標(biāo),也的枚舉類 型定義:enumskipws=0x0001, 跳過輸入中的它門字符left=OxOOO2, 輸出數(shù)據(jù)莊對齊right=0x0004輸出數(shù)據(jù)右對齊int
17、emal=0x(XX)8, 數(shù)據(jù)符號(hào)左對齊,數(shù)據(jù)本口右對齊 dcc=OxO() 0,轉(zhuǎn)換奧數(shù)為十進(jìn)制形式 oct=0x0020, 轉(zhuǎn)換堆數(shù)為八進(jìn)制形式 hex=0x0040, /轉(zhuǎn)換基數(shù)為卜六進(jìn)制形式 showbase=0x0080, 輸出的數(shù)值數(shù)據(jù)全面帶基數(shù)符號(hào)(0或Ox) showpoint=()xO 100,浮點(diǎn)數(shù)輸出帯小數(shù)點(diǎn) uppcrcasc=OxO2(X), 用大寫字母輸出十六進(jìn)制數(shù)值 showpos=0x0400, 止數(shù)全lAj帶號(hào)scientific=0x0800,浮點(diǎn)數(shù)輸出采用科學(xué)表示法 fixed=Ox 1000, /浮點(diǎn)數(shù)輸出采用定點(diǎn)熟形式 unitbuf=0x2000,
18、 /成操作后立即刷新緩沖區(qū) stdio=0x4000 完成操作丿后刷新stdout, stderr h第13秦5 C+格式標(biāo)志存放r 個(gè)long格數(shù)屮,要設(shè)置它可用 ios的sctf ()函數(shù),其一般格式為:long sctf (long flags):該函數(shù)設(shè)置參數(shù)flags所指定的標(biāo)志,返冋格式更 新前的標(biāo),忐。例如,耍設(shè)置showbase標(biāo),忐,可使用如 下語句:stream, setf (ios 11 showbase) :/其中 strea m 是所涉及的流實(shí)你上,還可以一次調(diào)用self ()來同時(shí)設(shè) 置多個(gè)標(biāo)志。例如:cout.setf (ios: :showpos I ios:
19、: scientific);第13車5 C+清除標(biāo)志可用unsetf ()函數(shù),其原型與seif ()類 似。川flags ()函數(shù)町得到半前標(biāo)志值和設(shè)置新標(biāo)志, 分別具有以下兩種原型:long flags (void):long flags (long Hags):除了標(biāo)志外,格式輸出還可設(shè)置域?qū)?、填充字符?輸出精度。其原型分別為:int width (int len);char fill (char ch):int precision (int num);第13章C列C+請編譯運(yùn)行卜而這段程序:稈 include Hioslream.hirVoid maincout.setf (ios
20、: : showposl ios: scientific): cout 123 1232vvn” :cout.precision (2);cout.width (10);cou( 123 12325” :cout.fill (*#*);cout.width ( 10):coinvvl23vvvv23.12:)運(yùn)行結(jié)果為:+123+1.2312c+O2+123+1.23c+O2nnn # # #+123+1.23+02輸出結(jié)果:12342 用操作子進(jìn)行格式化流類庫所定義操作子如下:dec. hex, oct:數(shù)值數(shù)據(jù)采用I進(jìn)制或I六進(jìn)制、八進(jìn)制表示.setbase (int n):設(shè)?i!數(shù)制轉(zhuǎn)
21、換墾數(shù)為n (0、8、10、16. 0農(nóng) 示便用缺省基數(shù))。ws:提取空白符。ends:插入空字符。flush:刷新與流相關(guān)聯(lián)的緩沖I*。resetiosflags (long ):消除參數(shù)所指定的林,忐位.setiosflags (long),設(shè)置參數(shù)所指定的標(biāo)志位.setfill (int):設(shè)置填充字符。sclsprccision (int):設(shè)置浮點(diǎn)數(shù)輸出的冇效數(shù)字個(gè)數(shù)。sclw(int),設(shè)置輸出數(shù)據(jù)項(xiàng)的域釦第13車5 C+例如:int i=1234:coutselw (12) iendl;13.4類與對象13.4.1類的定義類的定義格式為:class類名public:成員函數(shù)或數(shù)據(jù)
22、成員的說明private:成員函數(shù)或數(shù)據(jù)成員的說明I:第13傘5 C+其屮,class是定義類的關(guān)鍵字。類名是一標(biāo)識(shí)符, 通常用“T字母開始的了符串作為類名,T用來表示 類,以示與對象、函數(shù)名區(qū)別。花括匕內(nèi)是類的說 明部分(包括前面的類頭),說明該類的成員。第 13* C 列 C+例如,下面給出一個(gè)關(guān)于日期的類的定義。該類是 對日期抽彖,該類的對彖將是某個(gè)具體口期。H期類的說明部分:class TDatepublic:void SetDate (int y int m, int d);int IsLeap Year ():void Print (): private: int year, mo
23、nth, day;第13拿5C+類名為TDateo有三個(gè)公有成員.都是成員函數(shù)。SetDaie ()函數(shù)是設(shè)置日期的,用它來使對象獲取值; IsLeapYear ()函數(shù)是個(gè)用來判斷是否是閏年的函數(shù): 返回值為1表示該年是閏年,返回值為0農(nóng)示該年不是閏 年:print ()函數(shù)川來將年、丿J、H的具體值輸出顯 示。關(guān)丁這三個(gè)函數(shù)的功能通過下面的實(shí)現(xiàn)部分吋以看 lljo還冇三個(gè)私有成員,它們是ini型變址year、month 和day。該類共有六個(gè)成員。H期類的實(shí)現(xiàn)部分:void TDate11SetDate (int y, int m, int d)ycar=y: month=m: day=d:)int TDate: IsLeapYear ()return ( year%4=0&year% 100 !=0 )(year%400=0) : void TDate : Print ()coutycarw. M
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家政服務(wù)合同服務(wù)合同違約注意事項(xiàng)
- 盡快辦理房屋買賣合同事項(xiàng)
- 房屋合同補(bǔ)充協(xié)議糾紛解決
- 自來水管道鋪設(shè)合同范本
- 出國定居申請書
- 高效醫(yī)院體檢服務(wù)合同
- 電池制造購銷合同
- 服務(wù)品質(zhì)保證書樣例
- 遺贈(zèng)撫養(yǎng)協(xié)議樣本
- 住宅質(zhì)量保證承諾書
- 廣告牌匾安裝施工方案
- 研發(fā)中心薪資等級晉升制度
- 精益生產(chǎn)現(xiàn)場管理和改善課件(共132頁).ppt
- 傳情達(dá)意的賀卡.ppt
- 物資使用情況反饋表
- 老視的機(jī)制及治療
- IATF16949事態(tài)升級處理程序
- 鉆咀培訓(xùn)資料
- 《設(shè)計(jì)調(diào)查問卷》教學(xué)設(shè)計(jì)范文
- 常用抗凝藥物的應(yīng)用及護(hù)理PPT課件
- 枇杷栽培技術(shù)26661
評論
0/150
提交評論