版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第第11章章 C語言到語言到C+語言語言11-1 物件導(dǎo)向程式設(shè)計 11-2 青出於藍(lán)的C+11-3 C+的函數(shù)特殊功能 11-4 認(rèn)識類別 11-5 建構(gòu)子與解構(gòu)子11-6 本章綜合練習(xí) 211-1 物件導(dǎo)向程式設(shè)計 l物件導(dǎo)向程式設(shè)計 (Object-Oriented Programming, OOP)模式是近年來相當(dāng)流行的一種新興程式設(shè)計理念。 l主要讓我們在設(shè)計程式時,能以一種更生活化的設(shè)計觀念來進(jìn)行,並且所開發(fā)出來的程式也較容易擴(kuò)充、修改及維護(hù),像是Smalltalk、C+、Java等語言。3物件導(dǎo)向設(shè)計相關(guān)元件表 物件導(dǎo)向元件 特 色 與 說 明 物 件物件是一個存在的個體,在V
2、B視窗軟體中,物件可以是一個圖形、文字檔案等。 類 別同一類物件的集合體就是類別。類別好比是一個設(shè)計圖,它定義了這類物件的集合體應(yīng)有的屬性或功能,而物件就是依據(jù)這份藍(lán)圖所產(chǎn)生的實體。也就是說,定義好類別後,可以實作許多物件實體。 屬 性屬性就是指類別所擁有的靜態(tài)特性。 方 法屬性就是指類別所具有的功能。 事 件物件該於何時啟動什麼樣的工作,必須由事件來觸發(fā)。例如當(dāng)在某區(qū)域按下滑鼠左鍵時,就會產(chǎn)生按下滑鼠左鍵的事件,而視窗軟體本身也會依物件的功能進(jìn)行該事件的處理。4物件導(dǎo)向程式設(shè)計的三種特性圖 5封裝 l將屬性(attributes)與行為(behavior)包入一個物件的過程,稱為封裝(enc
3、apsulation)。l也就是說,封裝的作用是將物件的功能細(xì)節(jié)加以隱藏,而只顯示出所提供的功能介面。6繼承 l繼承是接近現(xiàn)實生活中的遺傳,例如你的父母生下你,那麼你一定會遺傳到父母的某些特徵,當(dāng)物件導(dǎo)向技術(shù)以這種生活實例去定義其功能時,則稱為繼承。l在繼承關(guān)係中,被繼承者稱為基礎(chǔ)類別或父類別,而繼承者則稱衍生類別或子類別。l而繼承允許我們?nèi)ザx一個新的類別來繼承既存類別,進(jìn)而使用或修改繼承而來的方法,並可在子類別中加入新的資料成員與函數(shù)成員。7遺傳關(guān)係l繼承關(guān)係中,一個類別有單一個父類別,稱為單一繼承(single inheritance)。如果一個類別有多個父類別,則稱為多重繼承(mult
4、iple inheritance)。8多形l多形也是物件導(dǎo)向設(shè)計的重要特性,它展現(xiàn)了動態(tài)繫結(jié)(dynamic binding)的功能,也稱為同名異式(polymorphism)。l多形功能可讓軟體在發(fā)展和維謢時,達(dá)到充份的延伸性。 9青出於藍(lán)的C+ lC+語言可以說是包含了整個C語言,所以C語言的程式在編譯器上可以直接將副檔名c改為cpp,即可編譯成C+語言程式。 10表頭檔 舊型標(biāo)頭檔說明包含數(shù)學(xué)運(yùn)算函數(shù)包含標(biāo)準(zhǔn)輸出入函數(shù)包含字串處理函數(shù)包含時間、日期的處理函數(shù)包含標(biāo)準(zhǔn)輸出入函數(shù)包含檔案輸出入的處理函數(shù)新型標(biāo)頭檔說明的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔包含
5、例外處理的類別包含標(biāo)準(zhǔn)函數(shù)庫(std)中String類別的定義及處理函數(shù)11註解 l在C語言中的註解(comment)是以/*/來表示,而C+除了支援C的註解寫法外,還多了一個雙斜線/的單行註解方式,也就是在程式中加入/,/後方所有的敘述都會被視為註解,並沒有註解結(jié)束符號。 l在C+語言中大都以/*/作為多行的註解方式,而以/作為短註解。 12名稱空間 l名稱空間(namespace),主要是用來區(qū)別每個類別庫中的類別名稱,由於各個不同廠商所研發(fā)出的類別庫,可能會有相同的類別名稱,所以標(biāo)準(zhǔn)C+語言新增了名稱空間的概念,以用來區(qū)別各種定義名稱。l這樣的作法會將所定義的名稱區(qū)域化,也就是只有在該名
6、稱空間的區(qū)域才能看到或使用定義的名稱,並將所有的程式庫都封裝在std名稱空間中,避免被其他引用的程式庫影響。 13名稱空間示意圖 14bool資料型態(tài) l語法如下:bool 變數(shù);或是bool 變數(shù)=true (or false);l由於C+包容了C語言的語法,所以C中的關(guān)係和邏輯運(yùn)算子產(chǎn)生的運(yùn)算式結(jié)果,不論是整數(shù)型態(tài)的運(yùn)算式或是bool型態(tài)運(yùn)算式,在C+裡都會自動轉(zhuǎn)換成所需的資料型態(tài)。 15資料型態(tài)轉(zhuǎn)換 lC+言的資料型態(tài)轉(zhuǎn)換,包含了C的自動資料型態(tài)轉(zhuǎn)換和強(qiáng)制資料型態(tài)轉(zhuǎn)換,其規(guī)則和方式都與C相同。不過C+的強(qiáng)制資料型態(tài)則提供了另外一種新的格式:舊式C語言的強(qiáng)制資料型態(tài)轉(zhuǎn)換:int a;dou
7、ble d;d=(double)a;C+語言的資料型態(tài)轉(zhuǎn)換:d=double (a);16標(biāo)準(zhǔn)輸出入函數(shù)l C+的標(biāo)準(zhǔn)輸出入函數(shù)與C中的標(biāo)準(zhǔn)輸出入函數(shù)相比,可說是非常簡化與方便。l其中C+的標(biāo)準(zhǔn)輸出指令為cout,讀作c-out,當(dāng)要輸出資料時,須搭配運(yùn)算子(output operator),表示將指定變數(shù)的資料或字串移動至輸出設(shè)備。語法格式如下:字串輸出方式:cout字串;數(shù)值輸出方式:cout變數(shù)名稱;17第一個C+程式範(fàn)例實作:CH11_1l程式範(fàn)例是第一個C+程式,可輸入兩個數(shù)字,並判斷其大小,用意是能讓各位熟悉C的基本架構(gòu)。 18字串 lANSI/ISO C+語言裡的字串函數(shù)是由表頭
8、檔所定義,而原本C的字串則被另一個新式表頭檔含括,所以C+中是存在兩個字串類別。l一般C版本的字串,是由char字元加上陣列的概念組成,並以0作為結(jié)束,如果在C+中要編譯或使用C版本的字串,只需要引用表頭檔即可。 19字串結(jié)合的運(yùn)算子總表 運(yùn)算子功能用法=字串指定str=字串;+字串串接str1+str2;+=字串串接並指定str1+=str2;=等於str1=str2;比較兩個字串是否相等。!=不等於str1!=str2;比較兩個字串是否不等。小於依照ASCII碼的代碼數(shù)字比較。大於依照ASCII碼的代碼數(shù)字比較。=大於等於依照ASCII碼的代碼數(shù)字比較。註標(biāo)用於字串的陣列。輸入用於字串的輸
9、入。20C與C+字串的宣告與使用範(fàn)例:CH11_2l程式範(fàn)例是介紹C與C+字串的各種宣告範(fàn)例,及示範(fàn)字串的串接運(yùn)算作法。21動態(tài)配置功能lC+語言中的動態(tài)配置的運(yùn)算子為new和delete,分別取代C中應(yīng)用於動態(tài)配置的malloc()函數(shù)和free()函數(shù)。l它們的用法相似,不過new和delete不必引用表頭檔。 22newl宣告方法如下:資料型態(tài) *指標(biāo)名稱=new 資料型態(tài)(初始值);l1.new運(yùn)算子會向系統(tǒng)要求配置記憶體,如果配置成功則傳回該記憶體位址,如配置失敗則傳回NULL值。l2.使用new運(yùn)算子動態(tài)配置記憶體時,可同時指定其初始值。 23deleteldelete運(yùn)算子是取代
10、了C中free()函數(shù)的功能。l因為使用new運(yùn)算子配置的記憶體空間,將會保留到程式結(jié)束執(zhí)行,才會歸還給系統(tǒng)。l因此當(dāng)配置的記憶體已不再使用時,就要使用delete運(yùn)算子來釋放該記憶體空間。 24new與delete運(yùn)算子的宣告與使用範(fàn)例:CH11_3 l程式範(fàn)例使用new運(yùn)算子配置動態(tài)記憶體空間來儲存輸入的數(shù)值,執(zhí)行加法運(yùn)算後顯示其和,並使用delete運(yùn)算子來釋放該記憶體空間。 25C+的函數(shù)特殊功能l在ANSI/ISO C+的函數(shù)部分,貼心地增加了一些功能或應(yīng)用,來取代一些C中較沒有效率的方法,讓C+在使用上更為方便。26函數(shù)的參數(shù)預(yù)設(shè)值l宣告方式與注意事項如下:資料型態(tài) 函數(shù)名稱(資料
11、型態(tài) 參數(shù)=數(shù)值);或資料型態(tài) 函數(shù)名稱(資料型態(tài) 參數(shù)=數(shù)值.) 程式敘述區(qū)塊;l 以下是四點(diǎn)注意事項:參數(shù)預(yù)設(shè)值必須是常數(shù)或是全域變數(shù)。參數(shù)預(yù)設(shè)值只能在函數(shù)原形或是函數(shù)定義中,擇一做設(shè)定,不可重覆。所有參數(shù)列中的參數(shù)都可指定預(yù)設(shè)值。在宣告有多個參數(shù)的函數(shù)時,不指定預(yù)設(shè)值的參數(shù)必須從參數(shù)列的左邊開始放置,然後才是有預(yù)設(shè)值的參數(shù)。如果在呼叫函數(shù)時,仍有傳遞參數(shù)值的動作,優(yōu)先於參數(shù)預(yù)設(shè)值。27參數(shù)預(yù)設(shè)值的宣告與使用範(fàn)例:CH11_4l程式範(fàn)例示範(fàn)參數(shù)預(yù)設(shè)值與一般參數(shù)值間的差異與優(yōu)先次序。 28傳參考呼叫 l傳參考呼叫也是屬於傳址呼叫的一種,但是在傳參考方式函數(shù)中,形式參數(shù)並不會另外再配置記憶體存
12、放實際參數(shù)傳入的位址,而是直接把形式參數(shù)作為實際參數(shù)的一個別名(alias)。29傳參考呼叫函數(shù)的宣告與使用範(fàn)例:CH11_5l程式範(fàn)例是以傳參考方式來撰寫Int_swap()函數(shù),並將傳入的整數(shù)值進(jìn)行交換。 l在Int_swap()函數(shù)定義內(nèi)的形式參數(shù)N_1與N_2,即為實際參數(shù)Num_1與Num_2的別名,兩者都參考到相同的變數(shù)。 30行內(nèi)函數(shù) l C+的行內(nèi)函數(shù)(inline function)類似C語言的參數(shù)巨集。l當(dāng)程式中使用到inline定義的函數(shù)時,C+會將呼叫inlie函數(shù)的部份,直接替換成inline函數(shù)內(nèi)的程式碼,而不會有實際的函數(shù)呼叫過程。 31inline函數(shù)的宣告與使
13、用範(fàn)例:CH11_6l程式範(fàn)例將利用inline函數(shù)來求取所輸入三個整數(shù)的和,並判斷是偶數(shù)或奇數(shù)。32函數(shù)多載l函數(shù)多載(Function Overloading) 是C+新增的功能,藉由函數(shù)多載的特性,使得同一個函數(shù)名稱可以用來定義成多個函數(shù)主體,而在程式中呼叫該函數(shù)名稱時,C+將會根據(jù)傳遞的形式參數(shù)個數(shù)與資料型態(tài)來決定實際呼叫的函數(shù)。l函數(shù)多載方式還必須依照以下兩個原則:函數(shù)名稱必須相同。各多載函數(shù)間的參數(shù)串列(arguments list)型態(tài)不能完全相同。 33函數(shù)多載的宣告與使用範(fàn)例:CH11_7l程式範(fàn)例將利用函數(shù)多載觀念來來設(shè)計一個簡單回傳所輸入不同型態(tài)值的相同名稱函數(shù)。 34認(rèn)
14、識類別l在日常生活中,舉目所見皆可當(dāng)成是一種物件(objects),物件(object)是物件導(dǎo)向程式設(shè)計中的基本元素,而每一個物件的建立都必須透過類別(class)的宣告。 lC+與C語言最大的差異在於C+加入了類別語法,也因此讓C+成為具有物件導(dǎo)向程式設(shè)計的功能。 35類別宣告l類別在C+的物件導(dǎo)向程式設(shè)計中,是屬於使用者定義的抽象資料型態(tài)(Abstract Data Type:ADT),內(nèi)部中包含此類別資料結(jié)構(gòu)的定義與處理此資料結(jié)構(gòu)的程式碼。l在類別中可以定義多種資料型態(tài),這些資料稱為類別的資料成員(Data Member),而類別中存取資料的函數(shù),稱為成員函數(shù)(Member Funct
15、ion),也可以稱為方法(method)。 36類別名稱 l存取層級關(guān)鍵字可分為以下三種:class 類別名稱private: / 不被外界所存取,皆未定義時預(yù)設(shè)值 私有成員 protected: / 只被繼承的類別所引用 保護(hù)成員 public: / 無存取現(xiàn)制,可任意存取 公用成員;37資料成員與成員函數(shù)l資料成員資料成員就是資料變數(shù)的部分,主要作為類別描述狀態(tài)之用,各位可以使用任何資料型態(tài)在類別內(nèi)定義。 l成員函數(shù)成員函數(shù)指作用於資料成員的相關(guān)函數(shù),是作為類別所描述之物件行為。通常運(yùn)用於內(nèi)部狀態(tài)改變的操作,或是與其他物件溝通的橋樑。 38建立類別物件l當(dāng)類別宣告與定義後,等於是建立了一個
16、新的資料形態(tài),然後就可以利用這種形態(tài)來宣告和建立物件。建立類別中物件的宣告格式如下:類別名稱 物件名稱;l類別名稱是指class定義的名稱,物件名稱則是用來存放這一個類別形態(tài)的變數(shù)名稱。 39類別物件的宣告與使用範(fàn)例:CH11_8l程式範(fàn)例將利用類別型態(tài)所宣告的物件來讓使用者輸入學(xué)號、數(shù)學(xué)成績以及英文成績之後,將總分及平均顯示出來。40建構(gòu)子與解構(gòu)子l如果在宣告物件後,希望能指定物件中資料成員的初始值,可以使用建構(gòu)子(constructor)來宣告。l而解構(gòu)子(destructor)則是用來釋放物件所佔(zhàn)用之記憶體,以作為其它物件所用。 41建構(gòu)子簡介l建構(gòu)子(constructor)是一種初始
17、化類別物件的成員函數(shù),可用於將物件內(nèi)部的私有資料成員設(shè)定初始值。 1.建構(gòu)子的名稱必須與類別名稱相同,例如class名稱為 MyClass,則建構(gòu)子為MyClass()。2.不需指定傳回型態(tài),也就是沒有傳回值。3.當(dāng)物件被建立時將自動產(chǎn)生預(yù)設(shè)建構(gòu)子,預(yù)設(shè)建構(gòu)子並不提供參數(shù)列傳入。4.建構(gòu)子可以有多載功能,也就是一個類別內(nèi)可以存在多個相同名稱,但參數(shù)列不同的建構(gòu)子。42建構(gòu)子的宣告與使用範(fàn)例:CH11_9l程式範(fàn)例是說明建構(gòu)子的宣告與定義,並在類別中建立建構(gòu)子,再於建立類別物件時,給予物件不同的初值。 43建構(gòu)子多載功能的宣告與應(yīng)用範(fàn)例:CH11_10l程式範(fàn)例中將以指標(biāo)型態(tài)來動態(tài)配置類別物件,
18、來實作與示範(fàn)建構(gòu)子多載功能。 44解構(gòu)子l宣告語法如下:類別名稱()/程式主體l解構(gòu)子不可以多載(overload),一個類別只能有一個解構(gòu)子。l解構(gòu)子的第一個字必須是,其餘則與該類別的名稱相同。l解構(gòu)子不含任何參數(shù)也不能回傳值。l在程式區(qū)塊結(jié)束前,所有在區(qū)塊中曾經(jīng)宣告的物件,都會依照先建構(gòu)者後解構(gòu)的順序執(zhí)行(first-construct-last-destructor)。45解構(gòu)子的宣告與使用範(fàn)例:CH11_1146函數(shù)物件傳遞l函數(shù)中傳遞物件參數(shù)和傳遞一般參數(shù)的方式大同小異,只要將一般資料型態(tài)參數(shù)列改為類別名稱即可。 47函數(shù)物件傳遞的宣告與使用範(fàn)例:CH11_12l程式範(fàn)例定義了square類別,並可透過建構(gòu)子初始化資料成員。 l該類別的成員函數(shù)可以接收另一個squ
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度大渡口吸污車出租及運(yùn)輸管理服務(wù)合同3篇
- 二零二五年個人隱私錄像拍攝與制作版權(quán)授權(quán)合同
- 二零二五年度建筑鋁模勞務(wù)分包合同編制要點(diǎn)與合同審查規(guī)范3篇
- 2023秋風(fēng)研學(xué)游云南麗江篇(童行藝游季主題)活動策劃方案-41正式版
- 地震安全知識培訓(xùn)
- 山東省臨沂市蘭山區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試生物試卷(含答案)
- 二零二五年度基礎(chǔ)設(shè)施建設(shè)質(zhì)押借款合同模板3篇
- 湖北省十堰市(2024年-2025年小學(xué)六年級語文)部編版專題練習(xí)((上下)學(xué)期)試卷及答案
- Unit3 Could you please clean your room Section A(3a-3c) 說課稿2024-2025學(xué)年人教版英語八年級下冊
- 二零二五年度影視作品植入式廣告合作合同3篇
- 散狀料上料安全操作規(guī)程模版(3篇)
- 配網(wǎng)工程施工監(jiān)理管理要點(diǎn)~.docx
- 債券市場基礎(chǔ)知識及應(yīng)用
- 國內(nèi)No.7信令方式技術(shù)規(guī)范----綜合業(yè)務(wù)數(shù)字網(wǎng)用戶部分(ISUP)
- 銷售人員培訓(xùn)教材
- 會計恒等式--試講
- 對外經(jīng)貿(mào)大學(xué)管理學(xué)原理復(fù)習(xí)大綱精品
- FSSC運(yùn)營管理制度(培訓(xùn)管理辦法)
- 電動平板車的使用和管理細(xì)則
- 明天會更好歌詞完整版
- (完整)中考英語首字母填空高頻詞
評論
0/150
提交評論