




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第11章章 C語(yǔ)言到語(yǔ)言到C+語(yǔ)言語(yǔ)言11-1 物件導(dǎo)向程式設(shè)計(jì) 11-2 青出於藍(lán)的C+11-3 C+的函數(shù)特殊功能 11-4 認(rèn)識(shí)類(lèi)別 11-5 建構(gòu)子與解構(gòu)子11-6 本章綜合練習(xí) 211-1 物件導(dǎo)向程式設(shè)計(jì) l物件導(dǎo)向程式設(shè)計(jì) (Object-Oriented Programming, OOP)模式是近年來(lái)相當(dāng)流行的一種新興程式設(shè)計(jì)理念。 l主要讓我們?cè)谠O(shè)計(jì)程式時(shí),能以一種更生活化的設(shè)計(jì)觀念來(lái)進(jìn)行,並且所開(kāi)發(fā)出來(lái)的程式也較容易擴(kuò)充、修改及維護(hù),像是Smalltalk、C+、Java等語(yǔ)言。3物件導(dǎo)向設(shè)計(jì)相關(guān)元件表 物件導(dǎo)向元件 特 色 與 說(shuō) 明 物 件物件是一個(gè)存在的個(gè)體,在V
2、B視窗軟體中,物件可以是一個(gè)圖形、文字檔案等。 類(lèi) 別同一類(lèi)物件的集合體就是類(lèi)別。類(lèi)別好比是一個(gè)設(shè)計(jì)圖,它定義了這類(lèi)物件的集合體應(yīng)有的屬性或功能,而物件就是依據(jù)這份藍(lán)圖所產(chǎn)生的實(shí)體。也就是說(shuō),定義好類(lèi)別後,可以實(shí)作許多物件實(shí)體。 屬 性屬性就是指類(lèi)別所擁有的靜態(tài)特性。 方 法屬性就是指類(lèi)別所具有的功能。 事 件物件該於何時(shí)啟動(dòng)什麼樣的工作,必須由事件來(lái)觸發(fā)。例如當(dāng)在某區(qū)域按下滑鼠左鍵時(shí),就會(huì)產(chǎn)生按下滑鼠左鍵的事件,而視窗軟體本身也會(huì)依物件的功能進(jìn)行該事件的處理。4物件導(dǎo)向程式設(shè)計(jì)的三種特性圖 5封裝 l將屬性(attributes)與行為(behavior)包入一個(gè)物件的過(guò)程,稱為封裝(enc
3、apsulation)。l也就是說(shuō),封裝的作用是將物件的功能細(xì)節(jié)加以隱藏,而只顯示出所提供的功能介面。6繼承 l繼承是接近現(xiàn)實(shí)生活中的遺傳,例如你的父母生下你,那麼你一定會(huì)遺傳到父母的某些特徵,當(dāng)物件導(dǎo)向技術(shù)以這種生活實(shí)例去定義其功能時(shí),則稱為繼承。l在繼承關(guān)係中,被繼承者稱為基礎(chǔ)類(lèi)別或父類(lèi)別,而繼承者則稱衍生類(lèi)別或子類(lèi)別。l而繼承允許我們?nèi)ザx一個(gè)新的類(lèi)別來(lái)繼承既存類(lèi)別,進(jìn)而使用或修改繼承而來(lái)的方法,並可在子類(lèi)別中加入新的資料成員與函數(shù)成員。7遺傳關(guān)係l繼承關(guān)係中,一個(gè)類(lèi)別有單一個(gè)父類(lèi)別,稱為單一繼承(single inheritance)。如果一個(gè)類(lèi)別有多個(gè)父類(lèi)別,則稱為多重繼承(mult
4、iple inheritance)。8多形l多形也是物件導(dǎo)向設(shè)計(jì)的重要特性,它展現(xiàn)了動(dòng)態(tài)繫結(jié)(dynamic binding)的功能,也稱為同名異式(polymorphism)。l多形功能可讓軟體在發(fā)展和維謢時(shí),達(dá)到充份的延伸性。 9青出於藍(lán)的C+ lC+語(yǔ)言可以說(shuō)是包含了整個(gè)C語(yǔ)言,所以C語(yǔ)言的程式在編譯器上可以直接將副檔名c改為cpp,即可編譯成C+語(yǔ)言程式。 10表頭檔 舊型標(biāo)頭檔說(shuō)明包含數(shù)學(xué)運(yùn)算函數(shù)包含標(biāo)準(zhǔn)輸出入函數(shù)包含字串處理函數(shù)包含時(shí)間、日期的處理函數(shù)包含標(biāo)準(zhǔn)輸出入函數(shù)包含檔案輸出入的處理函數(shù)新型標(biāo)頭檔說(shuō)明的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔的新型標(biāo)頭檔包含
5、例外處理的類(lèi)別包含標(biāo)準(zhǔn)函數(shù)庫(kù)(std)中String類(lèi)別的定義及處理函數(shù)11註解 l在C語(yǔ)言中的註解(comment)是以/*/來(lái)表示,而C+除了支援C的註解寫(xiě)法外,還多了一個(gè)雙斜線/的單行註解方式,也就是在程式中加入/,/後方所有的敘述都會(huì)被視為註解,並沒(méi)有註解結(jié)束符號(hào)。 l在C+語(yǔ)言中大都以/*/作為多行的註解方式,而以/作為短註解。 12名稱空間 l名稱空間(namespace),主要是用來(lái)區(qū)別每個(gè)類(lèi)別庫(kù)中的類(lèi)別名稱,由於各個(gè)不同廠商所研發(fā)出的類(lèi)別庫(kù),可能會(huì)有相同的類(lèi)別名稱,所以標(biāo)準(zhǔn)C+語(yǔ)言新增了名稱空間的概念,以用來(lái)區(qū)別各種定義名稱。l這樣的作法會(huì)將所定義的名稱區(qū)域化,也就是只有在該名
6、稱空間的區(qū)域才能看到或使用定義的名稱,並將所有的程式庫(kù)都封裝在std名稱空間中,避免被其他引用的程式庫(kù)影響。 13名稱空間示意圖 14bool資料型態(tài) l語(yǔ)法如下:bool 變數(shù);或是bool 變數(shù)=true (or false);l由於C+包容了C語(yǔ)言的語(yǔ)法,所以C中的關(guān)係和邏輯運(yùn)算子產(chǎn)生的運(yùn)算式結(jié)果,不論是整數(shù)型態(tài)的運(yùn)算式或是bool型態(tài)運(yùn)算式,在C+裡都會(huì)自動(dòng)轉(zhuǎn)換成所需的資料型態(tài)。 15資料型態(tài)轉(zhuǎn)換 lC+言的資料型態(tài)轉(zhuǎn)換,包含了C的自動(dòng)資料型態(tài)轉(zhuǎn)換和強(qiáng)制資料型態(tài)轉(zhuǎn)換,其規(guī)則和方式都與C相同。不過(guò)C+的強(qiáng)制資料型態(tài)則提供了另外一種新的格式:舊式C語(yǔ)言的強(qiáng)制資料型態(tài)轉(zhuǎn)換:int a;dou
7、ble d;d=(double)a;C+語(yǔ)言的資料型態(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ù)相比,可說(shuō)是非常簡(jiǎn)化與方便。l其中C+的標(biāo)準(zhǔn)輸出指令為cout,讀作c-out,當(dāng)要輸出資料時(shí),須搭配運(yùn)算子(output operator),表示將指定變數(shù)的資料或字串移動(dòng)至輸出設(shè)備。語(yǔ)法格式如下:字串輸出方式:cout字串;數(shù)值輸出方式:cout變數(shù)名稱;17第一個(gè)C+程式範(fàn)例實(shí)作:CH11_1l程式範(fàn)例是第一個(gè)C+程式,可輸入兩個(gè)數(shù)字,並判斷其大小,用意是能讓各位熟悉C的基本架構(gòu)。 18字串 lANSI/ISO C+語(yǔ)言裡的字串函數(shù)是由表頭
8、檔所定義,而原本C的字串則被另一個(gè)新式表頭檔含括,所以C+中是存在兩個(gè)字串類(lèi)別。l一般C版本的字串,是由char字元加上陣列的概念組成,並以0作為結(jié)束,如果在C+中要編譯或使用C版本的字串,只需要引用表頭檔即可。 19字串結(jié)合的運(yùn)算子總表 運(yùn)算子功能用法=字串指定str=字串;+字串串接str1+str2;+=字串串接並指定str1+=str2;=等於str1=str2;比較兩個(gè)字串是否相等。!=不等於str1!=str2;比較兩個(gè)字串是否不等。小於依照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動(dòng)態(tài)配置功能lC+語(yǔ)言中的動(dòng)態(tài)配置的運(yùn)算子為new和delete,分別取代C中應(yīng)用於動(dòng)態(tài)配置的malloc()函數(shù)和free()函數(shù)。l它們的用法相似,不過(guò)new和delete不必引用表頭檔。 22newl宣告方法如下:資料型態(tài) *指標(biāo)名稱=new 資料型態(tài)(初始值);l1.new運(yùn)算子會(huì)向系統(tǒng)要求配置記憶體,如果配置成功則傳回該記憶體位址,如配置失敗則傳回NULL值。l2.使用new運(yùn)算子動(dòng)態(tài)配置記憶體時(shí),可同時(shí)指定其初始值。 23deleteldelete運(yùn)算子是取代
10、了C中free()函數(shù)的功能。l因?yàn)槭褂胣ew運(yùn)算子配置的記憶體空間,將會(huì)保留到程式結(jié)束執(zhí)行,才會(huì)歸還給系統(tǒng)。l因此當(dāng)配置的記憶體已不再使用時(shí),就要使用delete運(yùn)算子來(lái)釋放該記憶體空間。 24new與delete運(yùn)算子的宣告與使用範(fàn)例:CH11_3 l程式範(fàn)例使用new運(yùn)算子配置動(dòng)態(tài)記憶體空間來(lái)儲(chǔ)存輸入的數(shù)值,執(zhí)行加法運(yùn)算後顯示其和,並使用delete運(yùn)算子來(lái)釋放該記憶體空間。 25C+的函數(shù)特殊功能l在ANSI/ISO C+的函數(shù)部分,貼心地增加了一些功能或應(yīng)用,來(lái)取代一些C中較沒(méi)有效率的方法,讓C+在使用上更為方便。26函數(shù)的參數(shù)預(yù)設(shè)值l宣告方式與注意事項(xiàng)如下:資料型態(tài) 函數(shù)名稱(資料
11、型態(tài) 參數(shù)=數(shù)值);或資料型態(tài) 函數(shù)名稱(資料型態(tài) 參數(shù)=數(shù)值.) 程式敘述區(qū)塊;l 以下是四點(diǎn)注意事項(xiàng):參數(shù)預(yù)設(shè)值必須是常數(shù)或是全域變數(shù)。參數(shù)預(yù)設(shè)值只能在函數(shù)原形或是函數(shù)定義中,擇一做設(shè)定,不可重覆。所有參數(shù)列中的參數(shù)都可指定預(yù)設(shè)值。在宣告有多個(gè)參數(shù)的函數(shù)時(shí),不指定預(yù)設(shè)值的參數(shù)必須從參數(shù)列的左邊開(kāi)始放置,然後才是有預(yù)設(shè)值的參數(shù)。如果在呼叫函數(shù)時(shí),仍有傳遞參數(shù)值的動(dòng)作,優(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ù)並不會(huì)另外再配置記憶體存
12、放實(shí)際參數(shù)傳入的位址,而是直接把形式參數(shù)作為實(shí)際參數(shù)的一個(gè)別名(alias)。29傳參考呼叫函數(shù)的宣告與使用範(fàn)例:CH11_5l程式範(fàn)例是以傳參考方式來(lái)撰寫(xiě)Int_swap()函數(shù),並將傳入的整數(shù)值進(jìn)行交換。 l在Int_swap()函數(shù)定義內(nèi)的形式參數(shù)N_1與N_2,即為實(shí)際參數(shù)Num_1與Num_2的別名,兩者都參考到相同的變數(shù)。 30行內(nèi)函數(shù) l C+的行內(nèi)函數(shù)(inline function)類(lèi)似C語(yǔ)言的參數(shù)巨集。l當(dāng)程式中使用到inline定義的函數(shù)時(shí),C+會(huì)將呼叫inlie函數(shù)的部份,直接替換成inline函數(shù)內(nèi)的程式碼,而不會(huì)有實(shí)際的函數(shù)呼叫過(guò)程。 31inline函數(shù)的宣告與使
13、用範(fàn)例:CH11_6l程式範(fàn)例將利用inline函數(shù)來(lái)求取所輸入三個(gè)整數(shù)的和,並判斷是偶數(shù)或奇數(shù)。32函數(shù)多載l函數(shù)多載(Function Overloading) 是C+新增的功能,藉由函數(shù)多載的特性,使得同一個(gè)函數(shù)名稱可以用來(lái)定義成多個(gè)函數(shù)主體,而在程式中呼叫該函數(shù)名稱時(shí),C+將會(huì)根據(jù)傳遞的形式參數(shù)個(gè)數(shù)與資料型態(tài)來(lái)決定實(shí)際呼叫的函數(shù)。l函數(shù)多載方式還必須依照以下兩個(gè)原則:函數(shù)名稱必須相同。各多載函數(shù)間的參數(shù)串列(arguments list)型態(tài)不能完全相同。 33函數(shù)多載的宣告與使用範(fàn)例:CH11_7l程式範(fàn)例將利用函數(shù)多載觀念來(lái)來(lái)設(shè)計(jì)一個(gè)簡(jiǎn)單回傳所輸入不同型態(tài)值的相同名稱函數(shù)。 34認(rèn)
14、識(shí)類(lèi)別l在日常生活中,舉目所見(jiàn)皆可當(dāng)成是一種物件(objects),物件(object)是物件導(dǎo)向程式設(shè)計(jì)中的基本元素,而每一個(gè)物件的建立都必須透過(guò)類(lèi)別(class)的宣告。 lC+與C語(yǔ)言最大的差異在於C+加入了類(lèi)別語(yǔ)法,也因此讓C+成為具有物件導(dǎo)向程式設(shè)計(jì)的功能。 35類(lèi)別宣告l類(lèi)別在C+的物件導(dǎo)向程式設(shè)計(jì)中,是屬於使用者定義的抽象資料型態(tài)(Abstract Data Type:ADT),內(nèi)部中包含此類(lèi)別資料結(jié)構(gòu)的定義與處理此資料結(jié)構(gòu)的程式碼。l在類(lèi)別中可以定義多種資料型態(tài),這些資料稱為類(lèi)別的資料成員(Data Member),而類(lèi)別中存取資料的函數(shù),稱為成員函數(shù)(Member Funct
15、ion),也可以稱為方法(method)。 36類(lèi)別名稱 l存取層級(jí)關(guān)鍵字可分為以下三種:class 類(lèi)別名稱private: / 不被外界所存取,皆未定義時(shí)預(yù)設(shè)值 私有成員 protected: / 只被繼承的類(lèi)別所引用 保護(hù)成員 public: / 無(wú)存取現(xiàn)制,可任意存取 公用成員;37資料成員與成員函數(shù)l資料成員資料成員就是資料變數(shù)的部分,主要作為類(lèi)別描述狀態(tài)之用,各位可以使用任何資料型態(tài)在類(lèi)別內(nèi)定義。 l成員函數(shù)成員函數(shù)指作用於資料成員的相關(guān)函數(shù),是作為類(lèi)別所描述之物件行為。通常運(yùn)用於內(nèi)部狀態(tài)改變的操作,或是與其他物件溝通的橋樑。 38建立類(lèi)別物件l當(dāng)類(lèi)別宣告與定義後,等於是建立了一個(gè)
16、新的資料形態(tài),然後就可以利用這種形態(tài)來(lái)宣告和建立物件。建立類(lèi)別中物件的宣告格式如下:類(lèi)別名稱 物件名稱;l類(lèi)別名稱是指class定義的名稱,物件名稱則是用來(lái)存放這一個(gè)類(lèi)別形態(tài)的變數(shù)名稱。 39類(lèi)別物件的宣告與使用範(fàn)例:CH11_8l程式範(fàn)例將利用類(lèi)別型態(tài)所宣告的物件來(lái)讓使用者輸入學(xué)號(hào)、數(shù)學(xué)成績(jī)以及英文成績(jī)之後,將總分及平均顯示出來(lái)。40建構(gòu)子與解構(gòu)子l如果在宣告物件後,希望能指定物件中資料成員的初始值,可以使用建構(gòu)子(constructor)來(lái)宣告。l而解構(gòu)子(destructor)則是用來(lái)釋放物件所佔(zhàn)用之記憶體,以作為其它物件所用。 41建構(gòu)子簡(jiǎn)介l建構(gòu)子(constructor)是一種初始
17、化類(lèi)別物件的成員函數(shù),可用於將物件內(nèi)部的私有資料成員設(shè)定初始值。 1.建構(gòu)子的名稱必須與類(lèi)別名稱相同,例如class名稱為 MyClass,則建構(gòu)子為MyClass()。2.不需指定傳回型態(tài),也就是沒(méi)有傳回值。3.當(dāng)物件被建立時(shí)將自動(dòng)產(chǎn)生預(yù)設(shè)建構(gòu)子,預(yù)設(shè)建構(gòu)子並不提供參數(shù)列傳入。4.建構(gòu)子可以有多載功能,也就是一個(gè)類(lèi)別內(nèi)可以存在多個(gè)相同名稱,但參數(shù)列不同的建構(gòu)子。42建構(gòu)子的宣告與使用範(fàn)例:CH11_9l程式範(fàn)例是說(shuō)明建構(gòu)子的宣告與定義,並在類(lèi)別中建立建構(gòu)子,再於建立類(lèi)別物件時(shí),給予物件不同的初值。 43建構(gòu)子多載功能的宣告與應(yīng)用範(fàn)例:CH11_10l程式範(fàn)例中將以指標(biāo)型態(tài)來(lái)動(dòng)態(tài)配置類(lèi)別物件,
18、來(lái)實(shí)作與示範(fàn)建構(gòu)子多載功能。 44解構(gòu)子l宣告語(yǔ)法如下:類(lèi)別名稱()/程式主體l解構(gòu)子不可以多載(overload),一個(gè)類(lèi)別只能有一個(gè)解構(gòu)子。l解構(gòu)子的第一個(gè)字必須是,其餘則與該類(lèi)別的名稱相同。l解構(gòu)子不含任何參數(shù)也不能回傳值。l在程式區(qū)塊結(jié)束前,所有在區(qū)塊中曾經(jīng)宣告的物件,都會(huì)依照先建構(gòu)者後解構(gòu)的順序執(zhí)行(first-construct-last-destructor)。45解構(gòu)子的宣告與使用範(fàn)例:CH11_1146函數(shù)物件傳遞l函數(shù)中傳遞物件參數(shù)和傳遞一般參數(shù)的方式大同小異,只要將一般資料型態(tài)參數(shù)列改為類(lèi)別名稱即可。 47函數(shù)物件傳遞的宣告與使用範(fàn)例:CH11_12l程式範(fàn)例定義了square類(lèi)別,並可透過(guò)建構(gòu)子初始化資料成員。 l該類(lèi)別的成員函數(shù)可以接收另一個(gè)squ
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)際關(guān)系學(xué)院《工程力學(xué)與機(jī)械設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北環(huán)境工程學(xué)院《護(hù)理學(xué)基礎(chǔ)技術(shù)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京航空航天大學(xué)金城學(xué)院《細(xì)胞生物學(xué)課程設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城市職業(yè)學(xué)院《戰(zhàn)略管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東新安職業(yè)技術(shù)學(xué)院《生物化學(xué)及實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長(zhǎng)春師范大學(xué)《汽車(chē)底盤(pán)構(gòu)造與維修》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西華澳商貿(mào)職業(yè)學(xué)院《移動(dòng)通信技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 大學(xué)生畢業(yè)實(shí)習(xí)計(jì)劃
- 大一新生軍訓(xùn)心得感悟(28篇)
- 農(nóng)村亂占耕地建房問(wèn)題整治工作匯報(bào)范文(3篇)
- 外研社一起英語(yǔ)四年級(jí)下冊(cè)課文
- 學(xué)校辦公室主任述職報(bào)告
- 《列夫·托爾斯泰》-完整版PPT
- 高考古代詩(shī)歌鑒賞復(fù)習(xí)教案
- 負(fù)數(shù)的認(rèn)識(shí)1202
- After-Effects影視特效設(shè)計(jì)教程完整版全套ppt課件
- 中國(guó)鐵塔建設(shè)維護(hù)工作培訓(xùn)PPT通用通用課件
- 新視野大學(xué)英語(yǔ)第三版Book 2 Unit 1 Text A
- 醫(yī)療設(shè)備清單
- SHD干燥機(jī)說(shuō)明書(shū)(英)
- 藍(lán)色卡通風(fēng)格研學(xué)旅行報(bào)告PPT講座學(xué)習(xí)
評(píng)論
0/150
提交評(píng)論