Visual_C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社1—8章答案_第1頁(yè)
Visual_C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社1—8章答案_第2頁(yè)
Visual_C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社1—8章答案_第3頁(yè)
Visual_C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社1—8章答案_第4頁(yè)
Visual_C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社1—8章答案_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章1. 什么是面向?qū)ο蟪绦蛟O(shè)計(jì)?它與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)有什么不同?面向?qū)ο蟪绦蛟O(shè)計(jì)既吸取了結(jié)構(gòu)化程序設(shè)計(jì)的一切優(yōu)點(diǎn),又考慮了現(xiàn)實(shí)世界與面向?qū)ο蠼饪臻g的映射關(guān)系,它所追求的目標(biāo)是將現(xiàn)實(shí)世界的問(wèn)題求解盡可能簡(jiǎn)單化。面向?qū)ο蟪绦蛟O(shè)計(jì)將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作放在一起,作為一個(gè)相互依存、不可分割的整體來(lái)處理,它采用了數(shù)據(jù)抽象和信息隱藏技術(shù)。它將對(duì)象及對(duì)對(duì)象的操作抽象成一種新的數(shù)據(jù)類型類,并且考慮不同對(duì)象之間的聯(lián)系和對(duì)象所在類的重要性。面向?qū)ο蟪绦蛟O(shè)計(jì)優(yōu)于傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),其優(yōu)越性表現(xiàn)在,它有希望解決軟件工程的兩個(gè)主要的問(wèn)題軟件復(fù)雜性控制和軟件生產(chǎn)率的提高,此外它還符合人類的思維習(xí)慣,能夠自然地表現(xiàn)

2、現(xiàn)實(shí)世界的實(shí)體和問(wèn)題,它對(duì)軟件開(kāi)發(fā)過(guò)程具有重要的意義。在面向?qū)ο蟪绦蛟O(shè)計(jì)中可以用下面的式子表示程序:程序=對(duì)象+對(duì)象+對(duì)象對(duì)象=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)語(yǔ)言+語(yǔ)言環(huán)境在結(jié)構(gòu)化程序設(shè)計(jì)中可以用下面的式子表示程序:程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)語(yǔ)言+語(yǔ)言環(huán)境2. 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言有哪幾類?(1) LISP家族LISP是50年代開(kāi)發(fā)出來(lái)的一種語(yǔ)言,它以表處理為特色,是一種人工智能語(yǔ)言,70年代以來(lái),在LISP基礎(chǔ)上開(kāi)發(fā)了很多LISP家族的面向?qū)ο笳Z(yǔ)言。(2) SimulaSimula語(yǔ)言是60年代開(kāi)發(fā)出來(lái)的,在Simula中引入了幾個(gè)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中最重要的概念和特性,即數(shù)據(jù)抽象、類和繼承

3、性機(jī)制。Simula67是它具有代表性的一個(gè)版本,70年代發(fā)展起來(lái)的CLU,Ada,Modula-2等語(yǔ)言是在它的基礎(chǔ)上發(fā)展起來(lái)的。(3) SmalltalkSmalltalk是第一個(gè)真正的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,它體現(xiàn)了純粹的OOP設(shè)計(jì)思想,是最純的OOP語(yǔ)言。它起源于Simula語(yǔ)言。盡管Smalltalk不斷完善,但在那個(gè)時(shí)期,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言并沒(méi)有得到廣泛的重視,程序設(shè)計(jì)的主流是結(jié)構(gòu)化程序設(shè)計(jì)。(4) C家族在19世紀(jì)80年代,C語(yǔ)言成為一種極其流行、應(yīng)用非常廣泛的語(yǔ)言。C+是在C語(yǔ)言的基礎(chǔ)上進(jìn)行擴(kuò)充,并增加了類似Smalltalk語(yǔ)言中相應(yīng)的對(duì)象機(jī)制。它將“類”看作是用戶定義類型,

4、使其擴(kuò)充比較自然。C+以其高效的執(zhí)行效率贏得了廣大程序設(shè)計(jì)員的青睞,在C+中提供了對(duì)C語(yǔ)言的兼容性,因此,很多已有的C程序稍加改造甚至不加改造就可以重用,許多有效的算法也可以重新利用。它是一種混合型的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,由于它的出現(xiàn),才使面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言越來(lái)越得到重視和廣泛的應(yīng)用。JAVA語(yǔ)言是一種適用于分布式計(jì)算的新型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,可以看作是C+語(yǔ)言的派生,它從C+語(yǔ)言中繼承了大量的語(yǔ)言成分,拋棄了C+語(yǔ)言中冗余的、容易引起問(wèn)題的功能,增加了多線程、異常處理、網(wǎng)絡(luò)程序設(shè)計(jì)等方面的支持,掌握了C+語(yǔ)言,可以很快學(xué)會(huì)JAVA 語(yǔ)言。3. 面向?qū)ο笙到y(tǒng)有哪些特性?分別加以解釋。(1

5、) 抽象性(abstract)抽象是一種從一般的觀點(diǎn)看待事物的方法,它要求程序員集中于事物的本質(zhì)特征,而不是具體細(xì)節(jié)或具體實(shí)現(xiàn)。類的概念來(lái)自人們認(rèn)識(shí)自然、認(rèn)識(shí)社會(huì)的過(guò)程。在這一過(guò)程中,人們主要使用兩種方法:從特殊到一般的歸納法和從一般到特殊的演繹法。在歸納的過(guò)程中,我們從一個(gè)個(gè)具體的事物中把共同的特征抽取出來(lái),形成一個(gè)一般的概念,這就是“歸類”;在演繹的過(guò)程中,我們又把同類的事物,根據(jù)不同的特征分成不同的小類,這就是“分類”。對(duì)于一個(gè)具體的類,它有許多具體的個(gè)體,我們稱這些個(gè)體叫做“對(duì)象”。(2) 封裝性(encapsulation)所謂數(shù)據(jù)封裝就是指一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的操作集合組裝在一

6、起,形成一個(gè)能動(dòng)的實(shí)體,也就是對(duì)象。數(shù)據(jù)封裝就是給數(shù)據(jù)提供了與外界聯(lián)系的標(biāo)準(zhǔn)接口,無(wú)論是誰(shuí),只有通過(guò)這些接口,使用規(guī)范的方式,才能訪問(wèn)這些數(shù)據(jù)。數(shù)據(jù)封裝是軟件工程發(fā)展的必然產(chǎn)物,使得程序員在設(shè)計(jì)程序時(shí)可以專注于自己的對(duì)象,同時(shí)也切斷了不同模塊之間數(shù)據(jù)的非法使用,減少了出錯(cuò)的可能性。(3) 繼承性(inheritance)從已有的對(duì)象類型出發(fā)建立一種新的對(duì)象類型,使它繼承原對(duì)象的特點(diǎn)和功能,這種思想是面向?qū)ο笤O(shè)計(jì)方法的主要貢獻(xiàn)。繼承是對(duì)許多問(wèn)題中分層特性的一種自然描述,因而也是類的具體化和被重新利用的一種手段,它所表達(dá)的就是一種對(duì)象類之間的相交關(guān)系。它使得某類對(duì)象可以繼承另外一類對(duì)象的特征和能力

7、。繼承所具有的作用有兩個(gè)方面:一方面可以減少代碼冗余;另一方面可以通過(guò)協(xié)調(diào)性來(lái)減少相互之間的接口和界面。(4) 多態(tài)性(polymorphism)不同的對(duì)象接收到相同的消息時(shí)產(chǎn)生多種完全不同的行為的現(xiàn)象稱為多態(tài)性。C+語(yǔ)言支持兩種多態(tài)性即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性通過(guò)重載函數(shù)實(shí)現(xiàn),而運(yùn)行時(shí)的多態(tài)性通過(guò)虛函數(shù)實(shí)現(xiàn)。使用多態(tài)性可以大大提高了我們解決復(fù)雜問(wèn)題的能力。4. 解釋類、對(duì)象、消息和方法的概念。(1) 類(class)在面向?qū)ο笙到y(tǒng)中,并不是將各個(gè)具體的對(duì)象都進(jìn)行描述,而是忽略其非本質(zhì)的特性,找出其共性,將對(duì)象劃分成不同的類,這一過(guò)程為抽象過(guò)程。類是對(duì)象的抽象及描述,是具

8、有共同屬性和操作的多個(gè)對(duì)象的相似特性的統(tǒng)一描述體。在類的描述中,每個(gè)類要有一個(gè)名字標(biāo)識(shí),用以表示一組對(duì)象的共同特征。類中的每個(gè)對(duì)象都是該類的實(shí)例。類提供了完整的解決特定問(wèn)題的能力,因?yàn)轭惷枋隽藬?shù)據(jù)結(jié)構(gòu)(對(duì)象屬性)、算法(服務(wù)、方法)和外部接口(消息協(xié)議),是一種用戶自定義的數(shù)據(jù)類型。(2) 對(duì)象(object)在面向?qū)ο笙到y(tǒng)中,對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單位。一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組服務(wù)構(gòu)成。屬性和服務(wù)是構(gòu)成對(duì)象的兩個(gè)主要因素,屬性是一組數(shù)據(jù)機(jī)構(gòu)的集合,表示對(duì)象的一種狀態(tài),對(duì)象的狀態(tài)只供對(duì)象自身使用,用來(lái)描述靜態(tài)特性,而服務(wù)是用來(lái)描述對(duì)象

9、動(dòng)態(tài)特征(行為)的一個(gè)操作序列,是對(duì)象一組功能的體現(xiàn)。對(duì)象是類的實(shí)例。(3) 消息(message)消息是面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對(duì)象間的通信和請(qǐng)求任務(wù)的操作,是要求某個(gè)對(duì)象執(zhí)行其中某個(gè)功能操作的規(guī)格說(shuō)明。發(fā)送消息的對(duì)象稱為發(fā)送者,接受消息的對(duì)象稱為接收者。對(duì)象間的聯(lián)系,只能通過(guò)消息來(lái)進(jìn)行。對(duì)象在接收到消息時(shí)才被激活。(4) 方法(method)在面向?qū)ο蟪绦蛟O(shè)計(jì)中,要求某一對(duì)象做某一操作時(shí),就向?qū)ο蟀l(fā)送一個(gè)相應(yīng)的消息,當(dāng)對(duì)象接收到發(fā)向它的消息時(shí),就調(diào)用有關(guān)的方法,執(zhí)行相應(yīng)的操作。方法就是對(duì)象所能執(zhí)行的操作。方法包括界面和方法體兩部分。方法的界面就是消息的模式,它給出了方法的調(diào)用協(xié)議;方法體則是實(shí)現(xiàn)

10、某種操作的一系列計(jì)算步驟,也就是一段程序。消息和方法的關(guān)系是:對(duì)象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過(guò)來(lái),有了方法,對(duì)象才能響應(yīng)相應(yīng)的消息。所以消息模式與方法界面應(yīng)該是一致的。同時(shí),只要方法界面保持不變,方法體的改動(dòng)不會(huì)影響方法的調(diào)用。在C+語(yǔ)言中方法是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)的,稱為成員函數(shù)。第二章1分析下列程序的執(zhí)行結(jié)果: 輸出隨機(jī)數(shù)2. 分析下列程序的執(zhí)行結(jié)果:i=03. C+語(yǔ)言對(duì)C語(yǔ)言在結(jié)構(gòu)化程序設(shè)計(jì)方面進(jìn)行了哪些擴(kuò)充?主要在以下方面進(jìn)行了擴(kuò)充:文件擴(kuò)展名、注釋符、名字空間、輸入輸出、變量的定義、強(qiáng)制類型轉(zhuǎn)換、動(dòng)態(tài)內(nèi)存的分配與釋放、作用域運(yùn)算符:、引用、const修飾符、字符串、函數(shù)4. 下

11、述C+程序有若干處錯(cuò)誤,試找出并糾正之。正確程序?yàn)椋?includeconst float PAI=3.14159265;丟失分號(hào)float square(float r)return PAI*r*r;float square(float high,float丟失float數(shù)據(jù)類型 length=0 此處去掉了.)return high*length;float (*fs)(float,float=0);void main() fs=□ coutThe circles square is fs(1.0)此處調(diào)用的是求長(zhǎng)方形面積的函數(shù),求出的面積為0,而并不是求圓的面積n;5. 引

12、用類型與指針類型有什么區(qū)別?指針的內(nèi)容或值是某一變量的內(nèi)存單元地址,而引用則與初始化它的變量具有相同的內(nèi)存單元地址。指針是個(gè)變量,可以把它再賦值成其它的地址,然而,建立引用時(shí)必須進(jìn)行初始化并且決不會(huì)再指向其它不同的變量。C+沒(méi)有提供訪問(wèn)引用本身地址的方法,因?yàn)樗c指針或其它變量的地址不同,它沒(méi)有任何意義。引用總是作為變量的別名使用,引用的地址也就是變量的地址。引用一旦初始化,就不會(huì)與初始化它的變量分開(kāi)。6函數(shù)、內(nèi)聯(lián)函數(shù)以及宏的區(qū)別。程序的模塊在C+中通過(guò)函數(shù)來(lái)實(shí)現(xiàn),函數(shù)由函數(shù)說(shuō)明和函數(shù)體2部分組成。內(nèi)聯(lián)函數(shù)是C+語(yǔ)言特有的一種函數(shù)附加類別,是通過(guò)在函數(shù)聲明之前插入“inline”關(guān)鍵字實(shí)現(xiàn)的。

13、編譯器會(huì)將編譯后的全部?jī)?nèi)聯(lián)函數(shù)的目的機(jī)器代碼復(fù)制到程序內(nèi)所有的引用位置并把往返傳送的數(shù)據(jù)也都溶合進(jìn)引用位置的計(jì)算當(dāng)中,用來(lái)避免函數(shù)調(diào)用機(jī)制所帶來(lái)的開(kāi)銷,提高程序的執(zhí)行效率。顯然這是以增加程序代碼空間為代價(jià)換來(lái)的。宏定義是編譯預(yù)處理命令,分為帶參數(shù)的和不帶參數(shù)的宏定義。在編譯之前進(jìn)行預(yù)處理時(shí),用宏定義中的字符串替換程序中所有出現(xiàn)的宏名。7. 函數(shù)重載有什么好處?函數(shù)重載使函數(shù)方便使用,便于記憶,也使程序設(shè)計(jì)更加靈活,增加程序的可讀性。例如,求兩個(gè)數(shù)中最大值的函數(shù)max,不管其參數(shù)是整數(shù)類型、實(shí)數(shù)類型、字符串,都可以使用同名函數(shù)來(lái)實(shí)現(xiàn),調(diào)用時(shí)只需使用max就可以了,編譯器將根據(jù)實(shí)參的類型判斷應(yīng)該調(diào)

14、用哪一個(gè)函數(shù)。8. 模板有什么作用?函數(shù)模板和模板函數(shù)有什么區(qū)別?所謂模板是一種使用無(wú)類型參數(shù)來(lái)產(chǎn)生一系列函數(shù)或類的機(jī)制,是C+的一個(gè)重要特征。通過(guò)模板可以產(chǎn)生類或函數(shù)的集合,使它們操作不同的數(shù)據(jù)類型,從而避免為每一種數(shù)據(jù)類型產(chǎn)生一個(gè)單獨(dú)的類或函數(shù)。函數(shù)模板提供了傳遞類型的機(jī)制。函數(shù)模板定義不是一個(gè)實(shí)實(shí)在在的函數(shù),編譯系統(tǒng)不為其產(chǎn)生任何執(zhí)行代碼。該定義只是對(duì)函數(shù)的描述,表示它每次能單獨(dú)處理在類型形式參數(shù)表中說(shuō)明的數(shù)據(jù)類型。函數(shù)模板只是說(shuō)明,不能直接執(zhí)行,需要實(shí)例化為模板函數(shù)后才能執(zhí)行。當(dāng)編譯系統(tǒng)發(fā)現(xiàn)有一個(gè)函數(shù)調(diào)用:;時(shí),將根據(jù)中的類型生成一個(gè)重載函數(shù),即模板函數(shù)。該模板函數(shù)的定義體與函數(shù)模板的

15、函數(shù)定義體相同,而的類型則以的實(shí)際類型為依據(jù)。第三章1 為什么要引入構(gòu)造函數(shù)和析構(gòu)函數(shù)?對(duì)象的初始化是指對(duì)象數(shù)據(jù)成員的初始化,在使用對(duì)象前,一定要初始化。由于數(shù)據(jù)成員一般為私有的(private),所以不能直接賦值。對(duì)對(duì)象初始化有以下兩種方法:類中提供一個(gè)普通成員函數(shù)來(lái)初始化,但是會(huì)造成使用上的不便(使用對(duì)象前必須顯式調(diào)用該函數(shù))和不安全(未調(diào)用初始化函數(shù)就使用對(duì)象)。當(dāng)定義對(duì)象時(shí),編譯程序自動(dòng)調(diào)用構(gòu)造函數(shù)。析構(gòu)函數(shù)的功能是當(dāng)對(duì)象被撤消時(shí),釋放該對(duì)象占用的內(nèi)存空間。析構(gòu)函數(shù)的作用與構(gòu)造函數(shù)正好相反,一般情況下,析構(gòu)函數(shù)執(zhí)行構(gòu)造函數(shù)的逆操作。在對(duì)象消亡時(shí),系統(tǒng)將自動(dòng)調(diào)用析構(gòu)函數(shù),執(zhí)行一些在對(duì)象撤

16、消前必須執(zhí)行的清理任務(wù)。2. 類的公有、私有和保護(hù)成員之間的區(qū)別是什么? 私有成員private: 私有成員是在類中被隱藏的部分,它往往是用來(lái)描述該類對(duì)象屬性的一些數(shù)據(jù)成員,私有成員只能由本類的成員函數(shù)或某些特殊說(shuō)明的函數(shù)(如第4章講到的友員函數(shù))訪問(wèn),而類的外部根本就無(wú)法訪問(wèn),實(shí)現(xiàn)了訪問(wèn)權(quán)限的有效控制,使數(shù)據(jù)得到有效的保護(hù),有利于數(shù)據(jù)的隱藏,使內(nèi)部數(shù)據(jù)不能被任意的訪問(wèn)和修改,也不會(huì)對(duì)該類以外的其余部分造成影響,使模塊之間的相互作用被降低到最小。private成員若處于類聲明中的第一部分,可省略關(guān)鍵字private。 公有成員public:公有成員對(duì)外是完全開(kāi)放的,公有成員一般是成員函數(shù),它提

17、供了外部程序與類的接口功能,用戶通過(guò)公有成員訪問(wèn)該類對(duì)象中的數(shù)據(jù)。 保護(hù)成員protected: 只能由該類的成員函數(shù),友元,公有派生類成員函數(shù)訪問(wèn)的成員。保護(hù)成員與私有成員在一般情況下含義相同,它們的區(qū)別體現(xiàn)在類的繼承中對(duì)產(chǎn)生的新類的影響不同,具體內(nèi)容將在第5章中介紹。缺省訪問(wèn)控制(未指定private、protected、public訪問(wèn)權(quán)限)時(shí),系統(tǒng)認(rèn)為是私有private成員。3. 什么是拷貝構(gòu)造函數(shù),它何時(shí)被調(diào)用?拷貝構(gòu)造函數(shù)的功能是用一個(gè)已有的對(duì)象來(lái)初始化一個(gè)被創(chuàng)建的同類對(duì)象,是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,當(dāng)創(chuàng)建一個(gè)新對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用它;其形參是本類對(duì)象的引用

18、,它的特殊功能是將參數(shù)代表的對(duì)象逐域拷貝到新創(chuàng)建的對(duì)象中。在以下四種情況下系統(tǒng)會(huì)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù): 用類的一個(gè)對(duì)象去初始化另一個(gè)對(duì)象cat cat1; cat cat2(cat1); / 創(chuàng)建 cat2時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù),/ 用cat1初始化cat2。 用類的一個(gè)對(duì)象去初始化另一個(gè)對(duì)象時(shí)的另外一種形式Cat cat2=cat1; / 注意并非cat cat1,cat2; cat2=cat1; 對(duì)象作為函數(shù)參數(shù)傳遞時(shí),調(diào)用拷貝構(gòu)造函數(shù)。f(cat a) / 定義f函數(shù),形參為cat類對(duì)象cat b; / 定義對(duì)象bf(b); / 進(jìn)行f函數(shù)調(diào)用時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù) 如果函數(shù)的

19、返回值是類的對(duì)象,函數(shù)調(diào)用返回時(shí),調(diào)用拷貝構(gòu)造函數(shù)。4. 設(shè)計(jì)一個(gè)計(jì)數(shù)器類,當(dāng)建立該類的對(duì)象時(shí)其初始狀態(tài)為0,考慮為計(jì)數(shù)器定義哪些成員?/ counter.h#ifndef counter_h#define counter_hclass counterprivate:int count;public:counter();void setCount(int i);int getCount();void displayCount();void incrementCount();void decrementCount();counter();#endif/ counter.cpp#include c

20、ounter.h#includecounter:counter()count = 0;void counter:displayCount()cout count endl;int counter:getCount()return count;void counter:setCount(int i)count = i;void counter:incrementCount()count+;void counter:decrementCount()count-;/ MAIN.CPP#include counter.h#includevoid main()counter c1;c1.displayC

21、ount();c1.setCount(4);c1.displayCount();for(int i=0; i=10;i+)c1.incrementCount();c1.displayCount();5. 定義一個(gè)時(shí)間類,能提供和設(shè)置由時(shí)、分、秒組成的時(shí)間,并編寫出應(yīng)用程序,定義時(shí)間對(duì)象,設(shè)置時(shí)間,輸出該對(duì)象提供的時(shí)間。#include class Timeint hour,minute,second;public:Time(int h=0,int m=0, int s=0)hour = h;minute = m;second = s;void setHour(int h)hour = h;vo

22、id setMinute(int m)minute = m;void setSecond(int s)second = s;void display()cout hour : minute : second endl;void main()Time t;t.display();t.setHour(13);t.setMinute(15);t.setSecond(30);t.display();6設(shè)計(jì)一個(gè)學(xué)生類student,它具有的私有數(shù)據(jù)成員是:注冊(cè)號(hào)、姓名、數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī)成績(jī);具有的公有成員函數(shù)是:求三門課總成績(jī)的函數(shù)sum;求三門課平均成績(jī)的函數(shù)average;顯示學(xué)生數(shù)據(jù)信息的函數(shù)p

23、rint;獲取學(xué)生注冊(cè)號(hào)的函數(shù)get_reg_num;設(shè)置學(xué)生數(shù)據(jù)信息的函數(shù)set_stu_inf。編制主函數(shù),說(shuō)明一個(gè)student類對(duì)象的數(shù)組并進(jìn)行全班學(xué)生信息的輸入與設(shè)置,而后求出每一學(xué)生的總成績(jī)、平均成績(jī)、全班學(xué)生總成績(jī)最高分、全班學(xué)生總平均分,并在輸入一個(gè)注冊(cè)號(hào)后,輸出該學(xué)生有關(guān)的全部數(shù)據(jù)信息。#include#includeusing namespace std;class Student private: int num; char name10; float math; float english; float computer;public:void set_stu_inf(

24、int n,char *ch,float m,float e,float c)num=n; strcpy(name,ch); math=m; english=e; computer=c; float sum()return (math+english+computer);float average()return (math+english+computer)/3;int get_reg_num()return num;void print()cout學(xué)號(hào):numendl姓名:nameendl數(shù)學(xué):mathendl英語(yǔ):englishendl計(jì)算機(jī):computerendl總分:sum()en

25、dl平均分:average()endl; void main() Student stu50;int i,q,a,z,x,max=0,aver=0; /i為循環(huán)變量,q:學(xué)號(hào);a:數(shù)學(xué)/成績(jī); z:英語(yǔ)成績(jī); x:計(jì)算機(jī)成績(jī)int count = 0; /表示學(xué)生人數(shù)char* we=new char10;/ 輸入學(xué)生信息for(;)cout請(qǐng)輸入學(xué)生的學(xué)號(hào)、姓名、數(shù)學(xué)成績(jī)、英語(yǔ)成績(jī)、計(jì)算機(jī)成績(jī):(若輸入的學(xué)號(hào)為0則表示退出) qweazx;if (q =0 )break;stucount+.set_stu_inf(q,we,a,z,x);if(maxa+z+x);else max=a+z+x

26、;aver+=(a+z+x);/ 輸出所有學(xué)生信息cout學(xué)生信息為:endlendl;for( i = 0; i count; i+)stui.print();coutendl;cout全班學(xué)生總成績(jī)最高分為maxendl全班學(xué)生總平均分為aver/3endlendl;cout請(qǐng)輸入要查的學(xué)生的學(xué)號(hào):q;for( i = 0; i count; i+)if (q=stui.get_reg_num()cout此學(xué)生信息為:endl;stui.print();break;if (i=count)cout查無(wú)此人endl;7. 模擬棧模型的操作,考慮順序棧和鏈棧兩種形式。鏈棧:#include c

27、lass Stack /定義堆棧類 struct Nodeint content; Node *next; *top; public: Stack() top = NULL; / 構(gòu)造函數(shù)的定義 bool push(int i); / 壓棧成員函數(shù)的聲明 bool pop(int& i); / 彈棧成員函數(shù)的聲明;bool Stack:push(int i) / 壓棧成員函數(shù)的定義 Node *p=new Node; if (p = NULL) cout content = i; p-next = top; top = p; return true;bool Stack:pop(int& i)

28、 / 彈棧成員函數(shù)的定義if (top = NULL) cout next; i = p-content; delete p; return true;void main()Stack st1,st2; / 定義對(duì)象st1和st2 int x;for(int i=1;i=5;i+)st1.push(i); / 壓棧成員函數(shù)的調(diào)用st2.push(i); / 壓棧成員函數(shù)的調(diào)用 coutstack1:endl;for(i=1;i=3;i+)st1.pop(x); / 彈棧成員函數(shù)的調(diào)用coutxendl;st1.push(20);for(i=1;i=4;i+)if(st1.pop(x)coutx

29、endl;elsebreak;coutstack2:endl;while(st2.pop(x)coutxendl;順序棧采用一維數(shù)組來(lái)實(shí)現(xiàn)。(略)8. 寫出下列程序的運(yùn)行結(jié)果:Constructing 22 11Constructing 20 10display:22 11display:20 10Destructing20 10Destructing22 11第五章1 什么是類的繼承與派生?繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)的第二個(gè)重要特性,通過(guò)繼承實(shí)現(xiàn)了數(shù)據(jù)抽象基礎(chǔ)上的代碼重用。繼承是對(duì)許多問(wèn)題中分層特性的一種自然描述,因而也是類的具體化和被重新利用的一種手段,它所表達(dá)的就是一種對(duì)象類之間的相交關(guān)系

30、。它使得某類對(duì)象可以繼承另外一類對(duì)象的特征和能力。繼承所具有的作用有兩個(gè)方面:一方面可以減少代碼冗余;另一方面可以通過(guò)協(xié)調(diào)性來(lái)減少相互之間的接口和界面。通過(guò)繼承方式定義的子類也稱為派生類。2 類的三種繼承方式之間的區(qū)別是什么?類的繼承方式有public(公有)繼承、protected(保護(hù))繼承和private(私有)繼承三種。對(duì)于不同的繼承方式,會(huì)導(dǎo)致基類成員原來(lái)的訪問(wèn)屬性在派生類中有所變化。表5.1列出了不同繼承方式下基類成員訪問(wèn)屬性的變化情況。表5.1 不同繼承方式下基類成員的訪問(wèn)屬性 訪問(wèn)屬性繼承方式publicprotectedprivatepublicpublicprotected

31、不可訪問(wèn)的protectedprotectedprotected不可訪問(wèn)的privateprivateprivate不可訪問(wèn)的說(shuō)明:該表第1列給出3種繼承方式,第1行給出基類成員的3種訪問(wèn)屬性。其余單元格內(nèi)容為基類成員在派生類中的訪問(wèn)屬性。從表中可以看出:(1) 基類的私有成員在派生類中均是不可訪問(wèn)的,它只能由基類的成員訪問(wèn)。(2) 在公有繼承方式下,基類中的公有成員和保護(hù)成員在派生類中的訪問(wèn)屬性不變。(3) 在保護(hù)繼承方式下,基類中的公有成員和保護(hù)成員在派生類中均為保護(hù)的。(4) 在私有繼承方式下,基類中的公有成員和保護(hù)成員在派生類中均為私有的。需要注意的是:保護(hù)成員與私有成員唯一的不同是當(dāng)

32、發(fā)生派生后,處在基類protected區(qū)的成員可被派生類直接訪問(wèn),而私有成員在派生類中是不可訪問(wèn)的。在同一類中私有成員和保護(hù)成員的用法完全一樣。3 派生類能否直接訪問(wèn)基類的私有成員?若否,應(yīng)如何實(shí)現(xiàn)?派生類不能直接訪問(wèn)基類的私有成員。具體實(shí)現(xiàn)方式:(1) 在類定義體中增加保護(hù)段為了便于派生類的訪問(wèn),可以將基類私有成員中需提供給派生類訪問(wèn)的部分定義為保護(hù)段成員。保護(hù)段成員可以被它的派生類訪問(wèn),但是對(duì)于外界是隱藏起來(lái)的。這樣,既方便了派生類的訪問(wèn),又禁止外界對(duì)它的派生類訪問(wèn)。這種方式的缺點(diǎn)是在公有派生的情況下,如果把成員設(shè)為保護(hù)訪問(wèn)控制,則為外界訪問(wèn)基類的保護(hù)段成員提供了機(jī)會(huì),而三種派生方式,我們

33、經(jīng)常使用的是公有派生。(2) 將需訪問(wèn)基類私有成員的派生類成員函數(shù)聲明為基類的友元這樣派生類中的其它成員函數(shù)均無(wú)權(quán)訪問(wèn)它,外界不可能通過(guò)派生新類來(lái)達(dá)到訪問(wèn)基類私有成員的目的。4 派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?在多繼承中,派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序又是怎樣的?構(gòu)造函數(shù)的執(zhí)行順序:先祖先(基類)、再客人(對(duì)象成員),后自己(派生類本身)。析構(gòu)函數(shù)的執(zhí)行順序和構(gòu)造函數(shù)正好嚴(yán)格相反:先自己(派生類本身),再客人(對(duì)象成員),后祖先(基類)。在多個(gè)基類之間嚴(yán)格按照派生類定義時(shí)從左到右的順序來(lái)排列先后。而析構(gòu)函數(shù)的調(diào)用順序剛好與構(gòu)造函數(shù)的相反。5 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用是什

34、么?在下面兩種情況下,必須定義派生類的構(gòu)造函數(shù):派生類本身需要構(gòu)造函數(shù);在定義派生類對(duì)象時(shí),其相應(yīng)的基類對(duì)象需調(diào)用帶有參數(shù)的構(gòu)造函數(shù)。派生類對(duì)象的初始化也是通過(guò)派生類的構(gòu)造函數(shù)實(shí)現(xiàn)的。具體來(lái)說(shuō),就是對(duì)該類的數(shù)據(jù)成員賦初值。派生類析構(gòu)函數(shù)的功能與沒(méi)有繼承關(guān)系的類中析構(gòu)函數(shù)的功能一樣,也是在對(duì)象消亡之前進(jìn)行一些必要的清理工作。6 多繼承一般應(yīng)用在哪些場(chǎng)合?對(duì)于多重繼承,派生類可以有多個(gè)直接基類。這時(shí)的派生類同時(shí)得到了多個(gè)已有類的特征。7 在類的派生中為何引入虛基類?在含有虛基類的派生類中,當(dāng)創(chuàng)建它的對(duì)象時(shí),構(gòu)造函數(shù)的執(zhí)行順序如何?當(dāng)在多條繼承路徑上有一個(gè)公共的基類,在這些路徑中的某幾條路徑匯合處,

35、這個(gè)公共的基類就會(huì)產(chǎn)生多個(gè)實(shí)例(或多個(gè)副本),若想只保存這個(gè)基類的一個(gè)實(shí)例,可以將這個(gè)公共基類說(shuō)明為虛基類。從基類派生新類時(shí),使用關(guān)鍵字virtual可以將基類說(shuō)明成虛基類。在多個(gè)基類之間嚴(yán)格按照派生類定義時(shí)從左到右的順序來(lái)排列先后。而析構(gòu)函數(shù)的調(diào)用順序剛好與構(gòu)造函數(shù)的相反。如果基類中有虛基類,則構(gòu)造函數(shù)的調(diào)用順序采用下列規(guī)則:(1) 虛基類的構(gòu)造函數(shù)在非虛基類之前調(diào)用。(2) 若同一層次中包含多個(gè)虛基類,這些虛基類的構(gòu)造函數(shù)按照他們說(shuō)明的次序調(diào)用;(3) 若虛基類由非虛基類派生而來(lái),則仍然先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)。特別需要注意,當(dāng)一個(gè)派生類同時(shí)有多個(gè)基類時(shí),對(duì)于所有需要給予

36、參數(shù)進(jìn)行初始化的基類,都要顯式給出基類名和參數(shù)表。對(duì)于使用默認(rèn)構(gòu)造函數(shù)的基類,可以不給出類名。同樣,對(duì)于對(duì)象成員,如果是使用默認(rèn)構(gòu)造函數(shù),也不需要寫出對(duì)象名和參數(shù)表。而對(duì)于單繼承,就只需要寫一個(gè)基類名就可以了。8 設(shè)計(jì)一個(gè)大學(xué)的類系統(tǒng),學(xué)校中有學(xué)生、教師、職員,每種人員都有自己的特性,他們之間又有相同的地方。利用繼承機(jī)制定義這個(gè)系統(tǒng)中的各個(gè)類及類上必須的操作。參考程序:#include #include class Personprotected:char m_strName10;int m_nSex;int m_nAge;public:Person(char *name,int age,ch

37、ar sex)strcpy(m_strName, name);m_nSex= (sex=m?0:1 );m_nAge = age;void setName(char *name)strcpy(m_strName, name);void setSex(int sex)m_nSex= (sex=m?0:1 );void setAge(int age)m_nAge = age;char * getName()return m_strName;int getAge()return m_nAge;int getSex()return m_nSex;void ShowMe()cout 姓 名:m_strN

38、ameendl;cout 性 別:(m_nSex=0?男:女)endl;cout 年 齡:m_nAgeendl;class Teacher : public Personchar m_strDept20;int m_fSalary;public:Teacher(char *name,int age,char sex,char *dept,int salary):Person(name,age,sex) strcpy(m_strDept, dept); m_fSalary = salary;void ShowMe() Person:ShowMe();cout 工作單位:m_strDeptendl

39、;cout 月 薪:m_fSalaryendl;void setSalary(int salary)m_fSalary = salary;int getSalary()return m_fSalary;class Student : public Personchar m_strID12;char m_strClass12;public:Student(char *name,int age,char sex,char *ID,char *Class):Person(name,age,sex)strcpy(m_strID, ID); strcpy(m_strClass, Class);void

40、ShowMe()cout 學(xué) 號(hào):m_strIDendl;Person:ShowMe();cout 班 級(jí):m_strClassn;void setID(char * ID)strcpy(m_strID, ID);void setClass(char *Class) strcpy(m_strClass, Class);char* getID()return m_strID;char* getClass()return m_strClass;class Employee:public Personint m_fSalary;public:Employee(char *name,int age,c

41、har sex,int salary):Person(name,age,sex)m_fSalary = salary;void setSalary(int salary)m_fSalary = salary;int getSalary()return m_fSalary;void ShowMe()Person:ShowMe();cout 工 資:m_fSalaryn;void main()/ 定義三個(gè)不同類的對(duì)象Teacher teacher1(劉馨,38,m,計(jì)算機(jī)系,3800);Student std1(劉麗,20,f,03016003,計(jì)算機(jī)03);Employee emPloyee1(

42、張?chǎng)?25,f,1500);/顯示各類人員的屬性teacher1.ShowMe();cout-endl;std1.ShowMe();cout-endl;emPloyee1.ShowMe();/修改各類人員的屬性teacher1.setAge(40);teacher1.setSalary(4500);std1.setAge(21);emPloyee1.setAge(26);emPloyee1.setSalary(2000);cout-endl;cout修改各類人員的屬性后:endl;teacher1.ShowMe();cout-endl;std1.ShowMe();cout-endl;emPlo

43、yee1.ShowMe();程序的執(zhí)行結(jié)果為:姓 名:劉馨 性 別:男 年 齡:38 工作單位:計(jì)算機(jī)系 月 薪:3800- 學(xué) 號(hào):03016003 姓 名:劉麗 性 別:女 年 齡:20 班 級(jí):計(jì)算機(jī)03- 姓 名:張?chǎng)?性 別:女 年 齡:25 工 資:1500-修改各類人員的屬性后: 姓 名:劉馨 性 別:男 年 齡:40 工作單位:計(jì)算機(jī)系 月 薪:4500- 學(xué) 號(hào):03016003 姓 名:劉麗 性 別:女 年 齡:21 班 級(jí):計(jì)算機(jī)03- 姓 名:張?chǎng)?性 別:女 年 齡:26 工 資:20009. 假定車可分為貨車和客車,客車又可分為轎車、面包車和公共汽車。請(qǐng)?jiān)O(shè)計(jì)相應(yīng)的類

44、層次結(jié)構(gòu)。說(shuō)明:可以把轎車、面包車和公共汽車定義為客車類的對(duì)象參考程序:#includeusing namespace std;class vehicle/ 定義基類vehiclepublic: / 公有函數(shù)成員 vehicle(int in_wheels,float in_weight); / 給數(shù)據(jù)成員初始化 int get_wheels(); / 獲取車輪數(shù) float get_weight(); / 獲取汽車重量 void setWeels(int wls); void setWeight(float wt); void display() cout車輪數(shù):wheels 汽車重量:we

45、ightendl; private: / 私有數(shù)據(jù)成員 int wheels; / 車輪數(shù) float weight; / 表示汽車承重;vehicle:vehicle(int in_wheels,float in_weight)wheels = in_wheels;weight = in_weight;float vehicle:get_weight()return weight;int vehicle:get_wheels()return wheels;void vehicle:setWeels(int wls)wheels = wls;void vehicle:setWeight(flo

46、at wt)weight = wt;class truck:public vehicle / 定義貨車類truckprivate: / 新增私有數(shù)據(jù)成員 float weight_load; / 承重public: / 新增公有成員函數(shù) truck(int wheel,float wt,float wl):vehicle(wheel,wt) weight_load = wl; float getLoads() return weight_load; void display() vehicle:display(); cout汽車承重weight_loadendl; ;/車和客車,客車又可分為轎

47、車、面包車和公共汽車class car:public vehicle/ 定義客車類car int passenger_load; / 新增私有數(shù)據(jù)成員,表示載客數(shù)public: / 新增公有成員函數(shù)car(int in_wheels,float in_weight,int people=4):vehicle(in_wheels,in_weight)passenger_load = people;int getPassengers()return passenger_load;void setPassengers(int people)passenger_load = people;void display() vehicle:display(); cout載客數(shù):pas

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論