面向?qū)ο蟪绦蛟O(shè)計_第1頁
面向?qū)ο蟪绦蛟O(shè)計_第2頁
面向?qū)ο蟪绦蛟O(shè)計_第3頁
面向?qū)ο蟪绦蛟O(shè)計_第4頁
面向?qū)ο蟪绦蛟O(shè)計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟪绦蛟O(shè)計復(fù)習(xí)資料一、客觀部分:(單項(xiàng)選擇、多項(xiàng)選擇、不定項(xiàng)選擇、判斷)(一)、選擇部分考核知識點(diǎn): 程序設(shè)計的基本概念 附1.1.1(考核知識點(diǎn)解釋):面向?qū)ο蟪绦蛟O(shè)計方法以“對象”為中心進(jìn)行分析和設(shè)計,將對象設(shè)計成解決目標(biāo)問題的基本構(gòu)件,思想是先將問題空間劃分為一系列對象的集合,再將具有相同屬性和行為的對象抽象成一個類,采用繼承機(jī)制來建立這些類之間的聯(lián)系,形成結(jié)構(gòu)層次。面向?qū)ο蟪绦蛟O(shè)計方法的本質(zhì)就是不斷設(shè)計新的類和創(chuàng)建對象的過程??己酥R點(diǎn): C+源程序的組成 附1.1.2(考核知識點(diǎn)解釋)一個C+程序一般由多個函數(shù)組成。這些函數(shù)可以是用戶根據(jù)需要編寫的自定義函數(shù),也可以是直接使用系

2、統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)。函數(shù)體用一對花括號“”和“”括起來。任何一個程序必須有且僅有一個主函數(shù)main,程序從主函數(shù)開始執(zhí)行??己酥R點(diǎn): 帶默認(rèn)形參值的函數(shù) 附1.1.3(考核知識點(diǎn)解釋)在調(diào)用函數(shù)時,需要針對函數(shù)中的每一個形參給出對應(yīng)的實(shí)參。C+中允許在函數(shù)定義或函數(shù)聲明時給出默認(rèn)的形參值。在調(diào)用函數(shù)時,對于有默認(rèn)值的形參,如果沒有給出相應(yīng)的實(shí)參,則函數(shù)會自動使用默認(rèn)形參值;如果給出相應(yīng)的實(shí)參,則函數(shù)會優(yōu)先使用傳入的實(shí)參值。默認(rèn)形參值可以在兩個位置指定:如果有函數(shù)聲明,則應(yīng)在函數(shù)聲明處指定;否則,直接在函數(shù)定義中指定。默認(rèn)形參值必須嚴(yán)格按照從右至左的順序進(jìn)行指定。考核知識點(diǎn): 函數(shù)重載 附1.

3、1.4(考核知識點(diǎn)解釋)C+允許不同的函數(shù)具有相同的函數(shù)名,這就是函數(shù)重載。當(dāng)調(diào)用一個函數(shù)時,除了要寫出函數(shù)名,還要根據(jù)函數(shù)的形參列表傳遞實(shí)參值。對于函數(shù)名相同的多個函數(shù),要在調(diào)用時能夠區(qū)分開到底要調(diào)用哪個函數(shù),只能根據(jù)傳遞實(shí)參在數(shù)量或類型上的不同來進(jìn)行判斷。也就是說,函數(shù)名相同的函數(shù)形參列表不能完全一樣,否則會因無法區(qū)分而報錯??己酥R點(diǎn): 堆內(nèi)存分配 附1.1.5(考核知識點(diǎn)解釋)在C+中,使用new和delete這兩個關(guān)鍵字完成堆內(nèi)存分配和釋放的操作。堆內(nèi)存分配new的用法為:new 數(shù)據(jù)類型表達(dá)式; 其中,表達(dá)式可以是常量,也可以是變量,其作用與聲明數(shù)組時里的表達(dá)式一樣,用于指定元素數(shù)

4、目。如果只申請一個元素的空間,那么表達(dá)式部分可以不寫:new 數(shù)據(jù)類型; 對于只申請一個元素空間的情況,在分配內(nèi)存的同時還可以進(jìn)行內(nèi)存初始化工作:new 數(shù)據(jù)類型(表達(dá)式); 其中,表達(dá)式確定了分配的內(nèi)存中初始存儲的數(shù)據(jù)。堆內(nèi)存釋放delete的用法為:delete p; 如果p所指向的堆內(nèi)存只包含一個元素,那么還可以將省掉,即:delete p; 必須使用指針保存分配的堆內(nèi)存首地址,這是由于delete須根據(jù)首地址進(jìn)行堆內(nèi)存釋放,如果不知道首地址則無法釋放內(nèi)存,從而造成內(nèi)存泄漏??己酥R點(diǎn): 引用的概念 附1.1.6(考核知識點(diǎn)解釋)引用就是別名,變量的引用就是變量的別名,對引用的操作就是對

5、所引用變量的操作??己酥R點(diǎn): 引用的聲明與特點(diǎn) 附1.1.7(考核知識點(diǎn)解釋)引用就是一個別名,聲明引用不會再為其分配內(nèi)存空間,而是與所引用對象占據(jù)同一片內(nèi)存空間。因此,對引用的操作與對所有引用對象的操作效果完全一樣??己酥R點(diǎn): 引用的聲明與特點(diǎn) 附1.1.8(考核知識點(diǎn)解釋)引用就是一個別名,聲明引用不會再為其分配內(nèi)存空間,而是與所引用對象占據(jù)同一片內(nèi)存空間。因此,對引用的操作與對所有引用對象的操作效果完全一樣??梢詾橹羔樧兞柯暶饕茫渎暶餍问綖椋簲?shù)據(jù)類型 *&引用名=指針變量名;考核知識點(diǎn): 類和對象的基本概念、對象的聲明 附1.1.9(考核知識點(diǎn)解釋)類是現(xiàn)實(shí)世界中客觀事物

6、的抽象,即將具有相似靜態(tài)屬性和動態(tài)行為的對象集合歸納為一個類。類是用戶自定義的數(shù)據(jù)類型,與基本數(shù)據(jù)類型一樣,需要聲明類數(shù)據(jù)類型的變量,即對象,通過對一個個的實(shí)際對象實(shí)施不同的操作,來解決問題。聲明對象的過程叫做類的實(shí)例化??己酥R點(diǎn): 類成員的訪問控制 附1.1.10(考核知識點(diǎn)解釋)類中可以出現(xiàn)多個訪問說明符,每個訪問說明符可以出現(xiàn)多次,不同的訪問說明符出現(xiàn)的順序沒有限制。如果沒有指明是哪種訪問級別,C+編譯系統(tǒng)默認(rèn)為私有(private)成員??己酥R點(diǎn): 構(gòu)造函數(shù)和析構(gòu)函數(shù) 附1.1.11(考核知識點(diǎn)解釋)在C+中,對象的初始化工作是由構(gòu)造函數(shù)來完成的。構(gòu)造函數(shù)是一種特殊的成員函數(shù), C

7、+規(guī)定可以在類內(nèi)聲明一個或多個構(gòu)造函數(shù),以滿足對象多樣性的初始化需要。構(gòu)造函數(shù)具有如下特征:構(gòu)造函數(shù)名與類名相同。構(gòu)造函數(shù)無任何函數(shù)返回類型說明。一個新的對象被創(chuàng)建時(通過對象聲明語句或使用new運(yùn)算符在堆區(qū)創(chuàng)建動態(tài)對象),屬于該對象的構(gòu)造函數(shù)被編譯系統(tǒng)自動調(diào)用,完成該對象數(shù)據(jù)成員的初始化工作。如果在類聲明中沒有給出構(gòu)造函數(shù),系統(tǒng)會自動給出一個默認(rèn)的無參構(gòu)造函數(shù):<類名>( ) 如果在類中聲明了多個構(gòu)造函數(shù),這就是構(gòu)造函數(shù)的重載。要求這些構(gòu)造函數(shù)要有不同的參數(shù)表,系統(tǒng)自動調(diào)用構(gòu)造函數(shù)時按照函數(shù)重載的規(guī)則選擇其中的一個構(gòu)造函數(shù)。在對象的生存期結(jié)束時,有時也需要執(zhí)行一些操作。這些工作就

8、可以放在析構(gòu)函數(shù)中。析構(gòu)函數(shù)是一個特殊的由用戶定義的公有成員函數(shù),析構(gòu)函數(shù)具有如下特征:析構(gòu)函數(shù)名為:<類名>,如IntArray。構(gòu)造函數(shù)無任何函數(shù)返回類型說明。析構(gòu)函數(shù)無參數(shù),所以不能被重載。如果在類聲明中沒有給出析構(gòu)函數(shù),系統(tǒng)會自動給出一個默認(rèn)的析構(gòu)函數(shù):<類名>()當(dāng)對象的生命周期結(jié)束及用delete釋放動態(tài)對象時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù)完成對象撤銷前的處理??己酥R點(diǎn): 構(gòu)造函數(shù) 附1.1.12(考核知識點(diǎn)解釋)一個新的對象被創(chuàng)建時(通過對象聲明語句或使用new運(yùn)算符在堆區(qū)創(chuàng)建動態(tài)對象),屬于該對象的構(gòu)造函數(shù)被編譯系統(tǒng)自動調(diào)用,完成該對象數(shù)據(jù)成員的初始化工作???/p>

9、核知識點(diǎn): 拷貝構(gòu)造函數(shù) 附1.1.13(考核知識點(diǎn)解釋)拷貝構(gòu)造函數(shù)有如下特征:(1)拷貝構(gòu)造函數(shù)名與類名相同,形參只有一個,是對象的引用,所以,不能重載拷貝構(gòu)造函數(shù)??截悩?gòu)造函數(shù)的原形為:<類名>(<類名> &對象名);(2)拷貝構(gòu)造函數(shù)無任何函數(shù)返回類型說明。(3)如果在類聲明中沒有給出拷貝構(gòu)造函數(shù),系統(tǒng)會自動給出一個默認(rèn)的拷貝構(gòu)造函數(shù),該拷貝構(gòu)造函數(shù)只進(jìn)行對象數(shù)據(jù)成員間的對位拷貝,即所謂的“淺拷貝”。(4)在某些情況下,用戶必須在類定義中給出一個顯式的拷貝構(gòu)造函數(shù),以實(shí)現(xiàn)用戶指定的用一個對象初始化另一個對象的功能,即所謂的“深拷貝”。(5)在以下3種情況

10、下,系統(tǒng)會自動調(diào)用拷貝構(gòu)造函數(shù):當(dāng)使用下面的聲明語句用一個已存在的對象初始化一個新對象時,系統(tǒng)會自動調(diào)用拷貝構(gòu)造函數(shù):<類名><新對象名>(<已存在對象名>);或<類名><新對象名>=<已存在對象名>對象作為實(shí)參,在函數(shù)調(diào)用開始進(jìn)行實(shí)參和形參結(jié)合時,會自動調(diào)用拷貝構(gòu)造函數(shù),完成由已知的實(shí)參對象初始化形參新對象的功能。如果函數(shù)的返回值是類的對象,在函數(shù)調(diào)用完成返回時,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù),用return后面的已知對象來初始化一個臨時新對象(所創(chuàng)建的臨時對象只在外部表達(dá)式范圍內(nèi)有效,表達(dá)式結(jié)束時,系統(tǒng)將自動調(diào)用析構(gòu)函數(shù)撤銷

11、該臨時對象)??己酥R點(diǎn): 構(gòu)造函數(shù) 附1.1.14(考核知識點(diǎn)解釋)在類的成員前如果加上關(guān)鍵字static,這種成員就是類的靜態(tài)成員。類的靜態(tài)成員包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。類的靜態(tài)成員的特點(diǎn)是:靜態(tài)成員屬于類,不屬于任何對象。無論有多少對象或沒有對象,靜態(tài)成員都只有一份存于公用內(nèi)存中,被該類的所有對象共享。在類定義中的數(shù)據(jù)成員聲明前加上關(guān)鍵字static,就使該數(shù)據(jù)成員成為靜態(tài)數(shù)據(jù)成員。靜態(tài)數(shù)據(jù)成員可以是public(公有)、private(私有)或protected(保護(hù))的。在下面定義的Account類中,m_rate被聲明為私有靜態(tài)成員。在類中聲明的靜態(tài)數(shù)據(jù)成員屬于引用性說明,并

12、不實(shí)際分配內(nèi)存。在創(chuàng)建對象時,會為對象的數(shù)據(jù)成員分配存儲空間。但由于靜態(tài)數(shù)據(jù)成員不屬于任何對象,所以在創(chuàng)建對象時也不會為該類的靜態(tài)數(shù)據(jù)成員分配存儲空間。所以,類設(shè)計者需要在類外對靜態(tài)數(shù)據(jù)成員進(jìn)行定義。靜態(tài)數(shù)據(jù)成員的定義形式如下:<類型><類名>:<靜態(tài)數(shù)據(jù)成員名>=<初值>類的靜態(tài)數(shù)據(jù)成員不屬于任何類,類的公有靜態(tài)數(shù)據(jù)成員的一般訪問形式是:<類名>:<靜態(tài)數(shù)據(jù)成員名>也可以是:<對象名>.<靜態(tài)數(shù)據(jù)成員名>或<對象指針>-><靜態(tài)數(shù)據(jù)成員名>后兩種訪問方式中的“對象名”

13、或“對象指針”只起到類名的作用,與具體對象無關(guān)。如果成員函數(shù)被聲明為static的,它就是靜態(tài)成員函數(shù)。像靜態(tài)成員數(shù)據(jù)一樣,靜態(tài)成員函數(shù)與具體對象無關(guān)。靜態(tài)成員函數(shù)不能訪問一般的數(shù)據(jù)成員,它只能訪問靜態(tài)數(shù)據(jù)成員,也只能調(diào)用其他的靜態(tài)成員函數(shù)。對類的靜態(tài)成員函數(shù)的調(diào)用形式通常是:<類名>:<靜態(tài)成員函數(shù)調(diào)用>可以用成員訪問操作符點(diǎn)(.)和箭頭(->)為一個類對象或指向類對象的指針調(diào)用,只是,這時候使用的只是對象的類型,與具體對象無關(guān)??己酥R點(diǎn): 構(gòu)造函數(shù) 附1.1.15(考核知識點(diǎn)解釋)將一個類聲明為另一個類的友類的語法形式為:friend <友類名>

14、或friend class <友類名>將A類聲明為B類的友類。聲明后,A類的任何成員函數(shù)都有權(quán)訪問B類中的任何成員,包括私有成員和保護(hù)成員??己酥R點(diǎn): 構(gòu)造函數(shù) 附1.1.16(考核知識點(diǎn)解釋)每個類成員函數(shù)都含有一個指向被調(diào)用對象的指針,這個指針被稱為this指針。this指針是一個隱含于每一個非靜態(tài)成員函數(shù)中的特殊指針,就是成員函數(shù)的一個類指針類型的形參。當(dāng)對一個對象調(diào)用非靜態(tài)成員函數(shù)時,編譯程序先將該對象的地址傳遞給成員函數(shù)的this指針,以及完成其他的參數(shù)傳遞,然后再進(jìn)入成員函數(shù)內(nèi)部進(jìn)行處理。在成員函數(shù)內(nèi)部存取數(shù)據(jù)成員或調(diào)用其他成員函數(shù)時,都是通過this指針隱式地引用它

15、所指向的對象的成員數(shù)據(jù)和成員函數(shù)。事實(shí)上,也可以通過this指針顯式引用它所指向?qū)ο蟮某蓡T數(shù)據(jù)和成員函數(shù)。由于有了this指針的存在,使得類中相同的成員函數(shù)會根據(jù)this指針指向?qū)ο蟮牟煌僮鞑煌瑢ο蟮臄?shù)據(jù)成員。類的靜態(tài)成員函數(shù)沒有this指針。這是因?yàn)殪o態(tài)成員函數(shù)為類的所有對象所共有,不屬于某一個對象。一般情況下,this指針隱式使用就可以了。但某些情況下需要顯式使用。下面是需要顯式使用this指針的兩種情況:(1)在類的非靜態(tài)成員函數(shù)中返回類對象本身的時候,直接使用“return *this;”。(2)另外一種情況是當(dāng)參數(shù)與成員變量名相同時。考核知識點(diǎn): string類 附1.1.17(

16、考核知識點(diǎn)解釋)使用string類,必須在程序中包含頭文件string(注意,這里不是string.h,string.h是C字符串頭文件)??己酥R點(diǎn): 派生類的繼承方式 附1.1.18(考核知識點(diǎn)解釋)以公有方式繼承時,基類的公有成員和保護(hù)成員的訪問控制方式在派生類中保持不變,仍作為派生類的公有成員和保護(hù)成員,基類的私有成員在派生類中不能直接訪問。以私有方式繼承時,基類的公有成員和保護(hù)成員在派生類中都作為私有成員,基類的私有成員在派生類中不能直接訪問。以保護(hù)方式繼承時,基類的公有成員和保護(hù)成員在派生類中都作為保護(hù)成員,基類的私有成員在派生類中無法直接訪問??己酥R點(diǎn): 派生類的繼承方式 附1

17、.1.19(考核知識點(diǎn)解釋)以公有方式繼承時,基類的公有成員和保護(hù)成員的訪問控制方式在派生類中保持不變,仍作為派生類的公有成員和保護(hù)成員,基類的私有成員在派生類中不能直接訪問。以私有方式繼承時,基類的公有成員和保護(hù)成員在派生類中都作為私有成員,基類的私有成員在派生類中不能直接訪問。以保護(hù)方式繼承時,基類的公有成員和保護(hù)成員在派生類中都作為保護(hù)成員,基類的私有成員在派生類中無法直接訪問??己酥R點(diǎn):類型兼容 附1.1.20(考核知識點(diǎn)解釋)類型兼容是指在基類對象可以出現(xiàn)的任何地方,都可以用公有派生類的對象來替代。類型兼容所指的是如下三種情況:(1)派生類對象可以賦值給基類對象;(2)派生類對象可

18、以初始化基類的引用;(3)基類指針可以指向派生類對象??己酥R點(diǎn):虛析構(gòu)函數(shù) 附1.1.21(考核知識點(diǎn)解釋)在調(diào)用派生類對象的析構(gòu)函數(shù)后,會自動調(diào)用基類對象的析構(gòu)函數(shù)來釋放基類中定義的指針成員。考核知識點(diǎn): 錯誤地使用虛函數(shù) 附1.1.22(考核知識點(diǎn)解釋)只有類的成員函數(shù)才能聲明為虛函數(shù)。因?yàn)樘摵瘮?shù)只適用于有繼承關(guān)系的類對象,所以普通函數(shù)不能聲明為虛函數(shù)。靜態(tài)成員函數(shù)不能是虛函數(shù),因?yàn)殪o態(tài)成員函數(shù)不受限于某個對象。內(nèi)聯(lián)函數(shù)不能是虛函數(shù),因?yàn)閮?nèi)聯(lián)函數(shù)不能在運(yùn)行中確定其位置。即使虛函數(shù)放在類的內(nèi)部定義,編譯時,仍將其看作是非內(nèi)聯(lián)的。構(gòu)造函數(shù)不能是虛函數(shù)。因?yàn)闃?gòu)造時,對象還是一片未定型的空間。只

19、有在構(gòu)造完成后,對象才能成為一個類的名副其實(shí)的實(shí)例。考核知識點(diǎn):重載為類的友元函數(shù) 附1.1.23(考核知識點(diǎn)解釋)友元函數(shù)“Complex operator-(Complex &c1,Complex &c2);”實(shí)現(xiàn)了減法運(yùn)算符的重載。該函數(shù)函數(shù)名為operator-,有兩個對象引用作為形參,返回值類型為對象類型。在主函數(shù)中可以用c1-c2的形式調(diào)用operator-()函數(shù),相當(dāng)于:operator-(c1, c2);考核知識點(diǎn):成員運(yùn)算符函數(shù)與友元運(yùn)算符函數(shù)的比較 附1.1.24(考核知識點(diǎn)解釋)雙目運(yùn)算符計算時需要兩個操作數(shù),所以調(diào)用運(yùn)算符重載函數(shù)時必須將要計算的兩個操

20、作數(shù)傳遞給函數(shù)。對于成員重載函數(shù),必須是某個對象調(diào)用這個函數(shù),而且將這個對象的地址傳遞給this指針,因此調(diào)用函數(shù)的這個對象就可以作為一個操作數(shù)傳遞給函數(shù),另一個操作數(shù)作為實(shí)參傳遞給形參即可,這樣成員重載函數(shù)只需要一個參數(shù)即可。相對的,友元函數(shù)是系統(tǒng)直接調(diào)用,所以兩個操作數(shù)都要作為實(shí)參傳遞到函數(shù)中去,所以友元重載函數(shù)需要兩個參數(shù)。考核知識點(diǎn):運(yùn)算符重載的規(guī)則 附1.1.25(考核知識點(diǎn)解釋)C+中不能重載的運(yùn)算符只有5個:. (成員訪問運(yùn)算符).* (成員指針訪問運(yùn)算符): (域運(yùn)算符)?: (條件運(yùn)算符)sizeof (長度運(yùn)算符)考核知識點(diǎn):運(yùn)算符重載的規(guī)則 附1.1.26(考核知識點(diǎn)解釋

21、)C+規(guī)定,賦值運(yùn)算符“=”,下標(biāo)運(yùn)算符“”,函數(shù)調(diào)用運(yùn)算符“()”,類型轉(zhuǎn)換運(yùn)算符“()”,成員運(yùn)算符“->”必須重載為成員函數(shù)。而插入運(yùn)算符“<<”,提取運(yùn)算符“>>”只能重載為非成員函數(shù)(友元函數(shù))。考核知識點(diǎn):標(biāo)準(zhǔn)輸入/輸出流 附1.1.27(考核知識點(diǎn)解釋)從鍵盤輸入、向屏幕輸出稱為標(biāo)準(zhǔn)輸入/輸出。為了實(shí)現(xiàn)標(biāo)準(zhǔn)輸入/輸出,C+預(yù)定義了4個標(biāo)準(zhǔn)流對象:cin、cout、cerr、clog,它們均包含于頭文件iostream中。考核知識點(diǎn):標(biāo)準(zhǔn)輸入/輸出流 附1.1.28(考核知識點(diǎn)解釋)cin是istream類的對象,用于處理標(biāo)準(zhǔn)輸入(鍵盤輸入);cout

22、是ostream類的對象,用于處理標(biāo)準(zhǔn)輸出(屏幕輸出);cerr和clog都是ostream類的對象,均用于處理出錯信息標(biāo)準(zhǔn)輸出。除了cerr不支持緩沖外,其他3個對象都支持緩沖輸入/輸出??己酥R點(diǎn):輸入流的成員函數(shù) 附1.1.29(考核知識點(diǎn)解釋)istream類提供了用于輸入單個字符的成員函數(shù)get(),istream的對象cin可以調(diào)用這個函數(shù)實(shí)現(xiàn)從鍵盤輸入一個字符的操作。cin調(diào)用get()有兩種格式:cin.get()或cin.get(ch)其中,ch為字符型變量??己酥R點(diǎn):文件的打開與關(guān)閉 附1.1.30(考核知識點(diǎn)解釋)對文件進(jìn)行輸入/輸出即讀/寫操作,必須先打開文件,使得文

23、件與流對象建立關(guān)聯(lián),然后利用流對象調(diào)用文件流類的運(yùn)算符或成員函數(shù)實(shí)現(xiàn)對文件的讀寫操作,操作完畢后關(guān)閉文件。考核知識點(diǎn):文件的打開與關(guān)閉 附1.1.31(考核知識點(diǎn)解釋)打開文件使用文件流類的成員函數(shù)open(),當(dāng)然在打開文件之前要先定義流對象,如:ifstream infile;infile.open("file1.txt");或ofstream outfile;outfile.open("file2.txt");首先定義文件流對象infile用于文件的輸入(讀)操作,然后文件流對象infile調(diào)用文件流類的成員函數(shù)open(),參數(shù)是要操作的磁盤文件

24、名,open()函數(shù)實(shí)現(xiàn)的功能是打開文件file1.txt,并將流對象infile和文件建立關(guān)聯(lián)。也可將兩條語句合并成一條語句,如:ofstream outfile("file2.txt");這樣就是在定義時調(diào)用帶參數(shù)的構(gòu)造函數(shù)創(chuàng)建流對象outfile,參數(shù)為文件名file2.txt,這就是在構(gòu)造函數(shù)中實(shí)現(xiàn)打開文件并將流對象outfile和文件建立關(guān)聯(lián)的操作??己酥R點(diǎn):函數(shù)模板的概念 附1.1.32(考核知識點(diǎn)解釋)函數(shù)模板可以對不同類型的數(shù)據(jù)進(jìn)行相同的處理,其作用與函數(shù)重載類似,但代碼要簡單得多??己酥R點(diǎn):函數(shù)模板的使用 附1.1.33(考核知識點(diǎn)解釋)函數(shù)模板需要實(shí)

25、例化為模板函數(shù)后才能執(zhí)行,即用實(shí)際的數(shù)據(jù)類型代替類型參數(shù)。實(shí)例化的函數(shù)模板稱為模板函數(shù)。函數(shù)模板的實(shí)例化是在函數(shù)調(diào)用時由編譯器來完成的。當(dāng)編譯器遇到一個函數(shù)調(diào)用時,便根據(jù)實(shí)參表中實(shí)參的類型和已定義的函數(shù)模板生成一個模板函數(shù),該模板函數(shù)的函數(shù)體與函數(shù)模板的函數(shù)體相同,而形參表中的類型則以實(shí)參表中的實(shí)際類型為依據(jù)。(二)、判斷部分考核知識點(diǎn):第一個C+程序 附1.2.1(考核知識點(diǎn)解釋)一個C+程序一般由多個函數(shù)組成。這些函數(shù)可以是用戶根據(jù)需要編寫的自定義函數(shù),也可以是直接使用系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)。函數(shù)體用一對花括號“”和“”括起來。任何一個程序必須有且僅有一個主函數(shù)main,程序從主函數(shù)開始執(zhí)行

26、??己酥R點(diǎn):類成員的訪問 附1.2.2(考核知識點(diǎn)解釋)在類體內(nèi),類的成員函數(shù)可以直接訪問類中的任何成員??己酥R點(diǎn):類成員的訪問控制 附1.2.3(考核知識點(diǎn)解釋)如果沒有給出訪問說明符,類默認(rèn)的訪問控制類型是private。考核知識點(diǎn):類成員的訪問控制 附1.2.4(考核知識點(diǎn)解釋)在public(公有) 區(qū)域內(nèi)聲明的成員是公有成員。公有成員在程序的任何地方都可以被訪問。一般將公有成員限制在成員函數(shù)上,使其作為類與外界的接口,程序通過這種函數(shù)來操作該類的對象。在protected(保護(hù))區(qū)域內(nèi)聲明的成員是被保護(hù)的成員。被聲明為protected(保護(hù))訪問級別的數(shù)據(jù)成員或函數(shù)成員只能在該

27、類的內(nèi)部或其派生類類體中使用??己酥R點(diǎn):類成員的訪問控制 附1.2.5(考核知識點(diǎn)解釋)在private(私有)區(qū)域內(nèi)聲明的成員是私有成員。私有成員只能被該類的成員函數(shù)或該類的友元訪問??己酥R點(diǎn):構(gòu)造函數(shù) 附1.2.6(考核知識點(diǎn)解釋)如果在類中聲明了多個構(gòu)造函數(shù),這就是構(gòu)造函數(shù)的重載。要求這些構(gòu)造函數(shù)要有不同的參數(shù)表,系統(tǒng)自動調(diào)用構(gòu)造函數(shù)時按照函數(shù)重載的規(guī)則選擇其中的一個構(gòu)造函數(shù)??己酥R點(diǎn):構(gòu)造函數(shù) 附1.2.7(考核知識點(diǎn)解釋)若在類中定義一個帶參構(gòu)造函數(shù),則系統(tǒng)不再提供默認(rèn)的無參構(gòu)造函數(shù);若創(chuàng)建對象時需要調(diào)用無參構(gòu)造函數(shù),就必須在類中定義一個無參構(gòu)造函數(shù)??己酥R點(diǎn):構(gòu)造函數(shù) 附1

28、.2.8(考核知識點(diǎn)解釋)若在類中定義一個帶參構(gòu)造函數(shù),則系統(tǒng)不再提供默認(rèn)的無參構(gòu)造函數(shù);若創(chuàng)建對象時需要調(diào)用無參構(gòu)造函數(shù),就必須在類中定義一個無參構(gòu)造函數(shù)。考核知識點(diǎn):析構(gòu)函數(shù) 附1.2.9(考核知識點(diǎn)解釋)析構(gòu)函數(shù)無參數(shù),所以不能被重載??己酥R點(diǎn):靜態(tài)成員 附1.2.10(考核知識點(diǎn)解釋)在類的成員前如果加上關(guān)鍵字static,這種成員就是類的靜態(tài)成員。類的靜態(tài)成員包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。類的靜態(tài)成員的特點(diǎn)是:靜態(tài)成員屬于類,不屬于任何對象。無論有多少對象或沒有對象,靜態(tài)成員都只有一份存于公用內(nèi)存中,被該類的所有對象共享。考核知識點(diǎn):靜態(tài)數(shù)據(jù)成員 附1.2.11(考核知識點(diǎn)解釋)

29、在類中聲明的靜態(tài)數(shù)據(jù)成員屬于引用性說明,并不實(shí)際分配內(nèi)存。在創(chuàng)建對象時,會為對象的數(shù)據(jù)成員分配存儲空間。但由于靜態(tài)數(shù)據(jù)成員不屬于任何對象,所以在創(chuàng)建對象時也不會為該類的靜態(tài)數(shù)據(jù)成員分配存儲空間。所以,類設(shè)計者需要在類外對靜態(tài)數(shù)據(jù)成員進(jìn)行定義。靜態(tài)數(shù)據(jù)成員的定義形式如下:<類型><類名>:<靜態(tài)數(shù)據(jù)成員名>=<初值>考核知識點(diǎn):靜態(tài)成員函數(shù) 附1.2.12(考核知識點(diǎn)解釋)如果成員函數(shù)被聲明為static的,它就是靜態(tài)成員函數(shù)。像靜態(tài)成員數(shù)據(jù)一樣,靜態(tài)成員函數(shù)與具體對象無關(guān)。靜態(tài)成員函數(shù)不能訪問一般的數(shù)據(jù)成員,它只能訪問靜態(tài)數(shù)據(jù)成員,也只能調(diào)用其他

30、的靜態(tài)成員函數(shù)。考核知識點(diǎn):友元函數(shù) 附1.2.13(考核知識點(diǎn)解釋)將普通函數(shù)聲明為類A的友元函數(shù)。聲明后,普通函數(shù)有權(quán)訪問類A中的任何成員,包括私有成員和保護(hù)成員??己酥R點(diǎn):友元 附1.2.14(考核知識點(diǎn)解釋)將類A聲明為類B的友類。聲明后,類A的任何成員函數(shù)都有權(quán)訪問類B中的任何成員,包括私有成員和保護(hù)成員。考核知識點(diǎn):什么是繼承 附1.2.15(考核知識點(diǎn)解釋)在C+中,如果一個類C1通過繼承已有類C而創(chuàng)建,則將C1稱作派生類(也稱做子類),將C稱做基類(也稱做父類)。派生類會繼承基類中定義的所有屬性和方法,另外也能夠在派生類中定義派生類所特有的屬性和方法??己酥R點(diǎn):什么是繼承

31、附1.2.16(考核知識點(diǎn)解釋)如:以形狀類為基類,可以派生出各種特定的幾何形狀,如圓形、四邊形、三角形,它們在具有形狀類所定義的屬性和行為的同時,還擁有各自的特性??己酥R點(diǎn):派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù) 附1.2.17(考核知識點(diǎn)解釋)派生類構(gòu)造函數(shù)的作用主要是對派生類中新添加的數(shù)據(jù)成員做初始化工作;在創(chuàng)建派生類對象、執(zhí)行派生類構(gòu)造函數(shù)時,系統(tǒng)會自動調(diào)用基類的構(gòu)造函數(shù)來對基類中定義的數(shù)據(jù)成員做初始化。同樣,派生類析構(gòu)函數(shù)的作用主要是清除派生類中新添加的數(shù)據(jù)成員、釋放它們所占據(jù)的系統(tǒng)資源;在銷毀派生類對象、執(zhí)行派生類析構(gòu)函數(shù)時,系統(tǒng)會自動調(diào)用基類的析構(gòu)函數(shù)來釋放基類中數(shù)據(jù)成員所占據(jù)的系統(tǒng)資源。

32、當(dāng)創(chuàng)建派生類對象時,先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù);析構(gòu)函數(shù)調(diào)用順序總是與構(gòu)造函數(shù)調(diào)用順序相反??己酥R點(diǎn):多重繼承 附1.2.18(考核知識點(diǎn)解釋)如果派生類是基于多個基類創(chuàng)建出來的,則稱這個繼承關(guān)系為多重繼承??己酥R點(diǎn): 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)、多重繼承 附1.2.19(考核知識點(diǎn)解釋)當(dāng)創(chuàng)建派生類對象時,先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)。在多重繼承中,各基類的構(gòu)造順序與派生類定義時基類表中各基類出現(xiàn)的順序一致。而析構(gòu)函數(shù)的調(diào)用順序總是與構(gòu)造函數(shù)調(diào)用順序相反。考核知識點(diǎn):虛函數(shù) 附1.2.20(考核知識點(diǎn)解釋)面向?qū)ο蟪绦蛟O(shè)計語言采用“后期綁定”,也可叫“動

33、態(tài)綁定”技術(shù),即當(dāng)調(diào)用某個對象的函數(shù)時,應(yīng)該被執(zhí)行的程序代碼會根據(jù)對象的具體類型在執(zhí)行期被確定下來。這是實(shí)現(xiàn)多態(tài)性的技術(shù)保證。想要實(shí)現(xiàn)多態(tài),就要進(jìn)行“后期綁定”,在C+中,實(shí)現(xiàn)“后期綁定”的機(jī)制是虛函數(shù)。只有將派生類對象賦給基類對象引用或?qū)⑴缮悓ο蟮刂焚x給基類對象指針時,才能夠表現(xiàn)出多態(tài)性。考核知識點(diǎn):虛函數(shù) 附1.2.21(考核知識點(diǎn)解釋)面向?qū)ο蟪绦蛟O(shè)計語言采用“后期綁定”,也可叫“動態(tài)綁定”技術(shù),即當(dāng)調(diào)用某個對象的函數(shù)時,應(yīng)該被執(zhí)行的程序代碼會根據(jù)對象的具體類型在執(zhí)行期被確定下來。這是實(shí)現(xiàn)多態(tài)性的技術(shù)保證。想要實(shí)現(xiàn)多態(tài),就要進(jìn)行“后期綁定”,在C+中,實(shí)現(xiàn)“后期綁定”的機(jī)制是虛函數(shù)。只

34、有將派生類對象賦給基類對象引用或?qū)⑴缮悓ο蟮刂焚x給基類對象指針時,才能夠表現(xiàn)出多態(tài)性??己酥R點(diǎn):虛函數(shù)的工作方式 附1.2.22(考核知識點(diǎn)解釋)只有將派生類對象賦給基類對象引用或?qū)⑴缮悓ο蟮刂焚x給基類對象指針時,才能夠表現(xiàn)出多態(tài)性。如果將派生類對象賦給基類對象,那么通過基類對象必然是調(diào)用基類中的函數(shù)??己酥R點(diǎn):抽象類 附1.2.23(考核知識點(diǎn)解釋)通常將不需要實(shí)例化的類定義成“抽象類”。抽象類不能實(shí)例化為對象,它的唯一用途是為其他類提供合適的基類,其他類可從它這里繼承和(或)實(shí)現(xiàn)接口??己酥R點(diǎn):抽象類 附1.2.24(考核知識點(diǎn)解釋)一個類如果是抽象類,則該類中至少有一個成員函數(shù)

35、是純虛函數(shù),純虛函數(shù)就是在聲明時初始化為0的虛函數(shù)。抽象類不能實(shí)例化為對象,它的唯一用途是為其他類提供合適的基類,其他類可從它這里繼承和(或)實(shí)現(xiàn)接口。考核知識點(diǎn):抽象類 附1.2.25(考核知識點(diǎn)解釋)如果某個類是從一個帶有純虛函數(shù)的類派生出來的,并且沒有在該派生類中提供該純虛函數(shù)的定義,則該虛函數(shù)在派生類中仍然是純虛函數(shù),因而該派生類也是一個抽象類??己酥R點(diǎn):成員運(yùn)算符函數(shù)與友元運(yùn)算符函數(shù)的比較 附1.2.26(考核知識點(diǎn)解釋)雙目運(yùn)算符計算時需要兩個操作數(shù),所以調(diào)用運(yùn)算符重載函數(shù)時必須將要計算的兩個操作數(shù)傳遞給函數(shù)。對于成員重載函數(shù),必須是某個對象調(diào)用這個函數(shù),而且將這個對象的地址傳遞

36、給this指針,因此調(diào)用函數(shù)的這個對象就可以作為一個操作數(shù)傳遞給函數(shù),另一個操作數(shù)作為實(shí)參傳遞給形參即可,這樣成員重載函數(shù)只需要一個參數(shù)即可??己酥R點(diǎn):成員運(yùn)算符函數(shù)與友元運(yùn)算符函數(shù)的比較 附1.2.27(考核知識點(diǎn)解釋)使用成員函數(shù)重載單目運(yùn)算符,不需要參數(shù)。因?yàn)橹挥幸粋€操作數(shù),而成員函數(shù)需要對象調(diào)用,該對象即為操作數(shù)傳遞給函數(shù)。使用友元函數(shù)重載單目運(yùn)算符,需要一個參數(shù),操作數(shù)作為實(shí)參傳遞給函數(shù)。無論是成員重載還是友元重載,單目運(yùn)算符重載時操作數(shù)類型必須是該類的對象。成員函數(shù)是對象調(diào)用,這個對象就是操作數(shù)。而對于友元函數(shù),參數(shù)是操作數(shù),但是參數(shù)也要求必須是該類型的對象,如果是其他類的對象或

37、內(nèi)部類型將沒有意義,系統(tǒng)也不允許??己酥R點(diǎn):運(yùn)算符重載的規(guī)則 附1.2.28(考核知識點(diǎn)解釋)C+規(guī)定,賦值運(yùn)算符“=”,下標(biāo)運(yùn)算符“”,函數(shù)調(diào)用運(yùn)算符“()”,類型轉(zhuǎn)換運(yùn)算符“()”,成員運(yùn)算符“->”必須重載為成員函數(shù)。而插入運(yùn)算符“<<”,提取運(yùn)算符“>>”只能重載為非成員函數(shù)(友元函數(shù))??己酥R點(diǎn):輸入/輸出流類 附1.2.29(考核知識點(diǎn)解釋)ios是一個抽象基類,提供一些對流狀態(tài)、工作方式等設(shè)置的功能。ios類作為虛基類派生出istream類和ostream類。輸入流類istream提供輸入操作功能,輸出流類ostream提供輸出操作功能。輸入/輸

38、出流類iostream是從istream類和ostream類通過多重繼承而派生的類。iostream類將輸入、輸出功能融合在一起,因此編寫程序時一般包含頭文件iostream以實(shí)現(xiàn)輸入/輸出操作,因?yàn)樵谠擃^文件中含有對輸入/輸出流類的定義及輸入/輸出操作的相關(guān)信息。streambuf類和其他類沒有繼承關(guān)系,該類提供緩沖輸入/輸出的支持。考核知識點(diǎn):文件的隨機(jī)讀/寫 附1.2.30(考核知識點(diǎn)解釋)seekg()函數(shù)和seekp()函數(shù)分別用于定位輸入文件和輸出文件的文件指針。它們的原型為: isream& seekg(long offset,seek_dir origin=ios:be

39、g); osream& seekp(long offset,seek_dir origin=ios:beg);seekg()函數(shù)的功能是將輸入文件的文件指針從參照位置origin開始移動offset個字節(jié),定位到新的位置。seekp()函數(shù)的功能是將輸出文件的文件指針從參照位置origin開始移動offset個字節(jié),定位到新的位置。其中,參數(shù)offset是長整型,表示文件指針相對參照位置偏移的字節(jié)數(shù)。參數(shù)origin則為參照位置,seek_dir是系統(tǒng)定義的枚舉類型,有以下3個枚舉常量:ios:beg文件首ios:cur文件當(dāng)前位置ios:end文件尾origin可以有以上3個取值,默

40、認(rèn)參數(shù)值為ios:beg。二、主觀部分:(一)、程序題1、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;#define size 5void get(int &n,int i)n=i;void print(int *n)for(int i=0;i<size;i+)cout<<ni<<" "cout<<endl;int main()int asize;for(int i=0;i<size;i+)get(ai,i);print(a);for(int i=0

41、;i<size;i+)get(asize-i-1,i);print(a);return 0;2、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;int nArray = 1, 2, 3, 4, 5;int& Index(int nI)return nArraynI;int main()int nI;for (nI = 0; nI < 5; nI+)cout<<nArraynI<<' 'cout<<endl;Index(1) = 9;for (nI = 0;

42、nI < 5; nI+)cout<<nArraynI<<' 'return 0;3、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;class Sample int x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b;void disp()cout<<"x="<<x<<",y="<<y<<endl;int main()Sample s

43、1, s2(2,3);s1.disp();s2.disp();return 0;4、寫出下面程序的運(yùn)行結(jié)果。#include<iostream>using namespace std;class Sample int A; static int B;public:Sample(int a)A=a,B+=a;static void func(Sample s);void Sample:func(Sample s) cout<<"A="<<s.A<<",B="<<B<<endl;int

44、Sample:B=0;int main() Sample s1(2),s2(5); Sample:func(s1); Sample:func(s2);return 0;5、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;class Basepublic:void Who( )cout<<"class Base"<<endl;class Derived1:public Basepublic:void Who( )cout<<"class Derived1"

45、<<endl;class Derived2:public Basepublic:void Who( )cout<<"class Derived2"<<endl;int main( )Base obj1,*p;Derived1 obj2;Derived2 obj3;p=&obj1;p->Who();p=&obj2;p->Who();p=&obj3;p->Who();obj2.Who();obj3.Who();return 0;6、寫出下面程序的運(yùn)行結(jié)果。#include<iostream>

46、;using namespace std;class Shapepublic:void Draw()cout<<"Shape"<<endl;virtual void Print()=0;class Circle:public Shapeprivate:double r;public:void Draw()cout<<"Circle"<<endl;void SetData(double radius)r=radius;void Print()cout<<"area:"<&

47、lt;3.14*r*r<<endl;class Rectangle:public Shapeprivate:double a,b;public:void Draw()cout<<"Rectangle"<<endl;void SetData(double x,double y)a=x,b=y;void Print()cout<<"area:"<<a*b<<endl;int main()Circle c;Rectangle r;Shape *sp1=&c;Shape &s

48、p2=r;c.SetData(10);r.SetData(3,5);sp1->Draw();c.Print();sp2.Draw();r.Print();return 0;7、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;class Sample;Sample operator-(Sample &,Sample &);Sample operator+(Sample &,Sample &);class Samplepublic:Sample()Sample(int i)n=i;friend

49、Sample operator-(Sample &,Sample &);friend Sample operator+(Sample &,Sample &);void disp()cout<<"n="<<n<<endl;private:int n;Sample operator-(Sample &s1,Sample &s2)int m=s1.n-s2.n;return Sample(m);Sample operator+(Sample &s1,Sample &s2) int

50、m=s1.n+s2.n;return Sample(m);int main( )Sample s1(10),s2(20),s3;s3=s2-s1;s3.disp();s3=s2+s1;s3.disp();return 0;8、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>using namespace std;class Samplepublic:Sample(int i)n=i;void operator+()n+; void operator+(int)n+=2; void disp()cout<<"n="<<n<

51、;<endl;private:int n;int main()Sample A(2),B(2);A+; +B; A.disp();B.disp();return 0;9、寫出下面程序的運(yùn)行結(jié)果。#include <iostream>#include <fstream>using namespace std;int main()ofstream file1;file1.open("f1.dat");file1<<123<<endl;file1<<63.78;file1.close();ifstream file

52、2("f1.dat");int i, j;file2>>i>>j;cout<<"i+j="<<i+j<<endl;file2.close();return 0;10、寫出下面程序的運(yùn)行結(jié)果。 #include <iostream>using namespace std;template <class T>class addT x, y;public:add(T a, T b) x=a;y=b;T add1() return x+y; ;int main()add <

53、int> A(65, 120);add <double> B(13.6, 22.9);cout<<"s1="<<A.add1()<<endl;cout<<"s2="<<B.add1()<<endl;return 0;11、swap()函數(shù)利用引用作為參數(shù)實(shí)現(xiàn)兩個變量的交換,將程序填寫完整。#include <iostream>using namespace std;void swap(int &x, int &y)int temp;tem

54、p=x;x=y;y=temp;int main()int a,b;cin>>a>>b;swap(a, b);cout<<a<<" "<<b<<endl;return 0;12、下面的程序定義了兩個類,一個是TennisClub,其成員數(shù)據(jù)有俱樂部和會員名,另一個是Person,其成員數(shù)據(jù)有姓名和年齡,類TennisClub的成員函數(shù)visit可以顯示姓名、年齡、俱樂部名、會員名。將程序填寫完整。#include <iostream>#include <string.h>using

55、 namespace std;class Person;class TennisClubpublic:TennisClub(char *p,char *q)strcpy(club,p);strcpy(name,q);void visit(Person);private:char club24;char name24;class Personpublic:Person(char *p,int y)strcpy(name,p);age=y;friend void TennisClub:visit(Person x);private:char name24;int age;void TennisCl

56、ub:visit(Person x)cout<<"姓名:"<<<<endl;cout<<"年齡:"<<x.age<<endl;cout<<"可以使用的俱樂部:"<<club<<endl;cout<<"介紹人:"<<name<<endl;int main()TennisClub a("明星俱樂部","李曉明");Person

57、 b("張靜",28);a.visit(b);return 0;13、請將下面程序補(bǔ)充完整。#include <iostream>using namespace std;class Student;class Teacherpublic:void setScore(Student& s,double sc);void setHour(Student& s,int h);private:long number;char name10; ;class Studentpublic:friend class Teacher;double getScore() return score; int getHour() return semeHour; private:long number;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論