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

下載本文檔

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

文檔簡介

1、.面向?qū)ο蟪绦蛟O(shè)計教程(C+語言描述)題解與課程設(shè)計指導(dǎo)第 1 章面向?qū)ο蟪绦蛟O(shè)計概論一、 名詞解釋抽象封裝消息【問題解答】面向?qū)ο蠓椒ㄖ械某橄笫侵笇唧w問題 (對象)進行概括, 抽出一類對象的公共性質(zhì)并加以描述的過程。面向?qū)ο蠓椒ㄖ械姆庋b就是把抽象出來的對象的屬性和行為結(jié)合成一個獨立的單位,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。消息是面向?qū)ο蟪绦蛟O(shè)計用來描述對象之間通信的機制。 一個消息就是一個對象要求另一個對象實施某種操作的一個請求。二、 填空題( 1)目前有面向過程的結(jié)構(gòu)化程序設(shè)計方法和面向?qū)ο蟮某绦蛟O(shè)計方法兩種重要的程序設(shè)計方法。( 2) 結(jié)構(gòu)化程序設(shè)計方法中的模塊由順序、選擇和循環(huán)3 種基本結(jié)

2、構(gòu)組成。( 3) 在結(jié)構(gòu)化程序設(shè)計方法中,程序可表示為程序=數(shù)據(jù)結(jié)構(gòu) +算法;而面向?qū)ο蟮某绦蛟O(shè)計方法,程序可表示為程序=對象 +消息。( 4) 結(jié)構(gòu)化程序設(shè)計方法中的基本模塊是過程; 而面向?qū)ο蟪绦蛟O(shè)計方法中的基本模塊是類。( 5) 面向?qū)ο蟪绦蛟O(shè)計方法具有抽象性、封裝性、繼承性和多態(tài)性等特點。三、 選擇題(至少選一個,可以多選)( 1) 面向?qū)ο蟪绦蛟O(shè)計著重于( B )的設(shè)計。A. 對象B. 類C. 算法D. 數(shù)據(jù)( 2) 面向?qū)ο蟪绦蛟O(shè)計中, 把對象的屬性和行為組織在同一個模塊內(nèi)的機制叫做(C )。A. 抽象 B.繼承 C.封裝D.多態(tài)( 3) 在面向?qū)ο蟪绦蛟O(shè)計中,類通過(D)與外界發(fā)

3、生關(guān)系。A. 對象B.類C.消息D.接口( 4) 面向?qū)ο蟪绦蛟O(shè)計中,對象與對象之間的通信機制是(C )。A. 對象B.類 C.消息D.接口( 5) 關(guān)于 C+與 C語言的關(guān)系的描述中,(D )是錯誤的。A. C 語言是 C+的一個子集B. C語言與 C+是兼容的C. C+對 C 語言進行了一些改進 D. C+ 和 C 語言都是面向?qū)ο蟮摹窘Y(jié)果分析】C語言是面向過程的。 C+語言是一種經(jīng)過改進的更為優(yōu)化的C語言,是一種混合型語言,既面向過程也面向?qū)ο?。?6) 面向?qū)ο蟮某绦蛟O(shè)計將數(shù)據(jù)結(jié)構(gòu)與( A )放在一起,作為一個相互依存、不可分割的整體來處理。1/21.A. 算法B.信息C.數(shù)據(jù)隱藏D.

4、數(shù)據(jù)抽象( 7) 下面(A)不是面向?qū)ο笙到y(tǒng)所包含的要素。A.重載B.對象C.類D.繼承【結(jié)果分析】面向?qū)ο?=對象 +類+繼承 +消息 +多態(tài)( 8) 下面說法正確的是(BC)。A. 將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個函數(shù)內(nèi),即為數(shù)據(jù)封裝B. 一個類通過繼承可以獲得另一個類的特性C. 面向?qū)ο笠蟪绦騿T集中于事物的本質(zhì)特征,用抽象的觀點看待程序D. 同一消息為不同的對象接受時,產(chǎn)生的行為是一樣的,這稱為一致性【結(jié)果分析】面向?qū)ο蟪绦蛟O(shè)計方法具有抽象性、 封裝性、繼承性和多態(tài)性等特點。 將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個類內(nèi), 即為數(shù)據(jù)封裝。 同一消息為不同的對象接受時, 產(chǎn)生的行為可能是不一樣的,這稱為多態(tài)

5、性。( 9) 下面說法正確的是( AD )。A. 對象是計算機內(nèi)存中的一塊區(qū)域,它可以存放代碼和數(shù)據(jù)B. 對象實際是功能相對獨立的一段程序C. 各個對象間的數(shù)據(jù)可以共享是對象的一大優(yōu)點D. 在面向?qū)ο蟮某绦蛑?,對象之間只能通過消息相互通信【結(jié)果分析】對象是計算機內(nèi)存中的一塊區(qū)域。在對象中,不但存有數(shù)據(jù),而且存有代碼,使得每個對象在功能上相互之間保持相對獨立。 對象之間存在各種聯(lián)系, 但它們之間只能通過消息進行通信。四、 判斷題( 1) 在高級程序設(shè)計語言中, 一般用類來實現(xiàn)對象, 類是具有相同屬性和行為的一組對象的集合,它是創(chuàng)建對象的模板。( )( 2) C+語言只支持面向?qū)ο蠹夹g(shù)的抽象性、封

6、裝性、繼承性等特性,而不支持多態(tài)性。( × )【結(jié)果分析】C+語言不僅支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而且支持多態(tài)性。( 3) 面向?qū)ο蟪绦蛟O(shè)計中的消息應(yīng)該包含“如何做”的信息。(× )【結(jié)果分析】消息是面向?qū)ο蟪绦蛟O(shè)計用來描述對象之間通信的機制。向?qū)ο蟆鞍l(fā)送消息”只需告訴對象做什么,對象根據(jù)這個消息決定如何做。( 4) 一個消息只能產(chǎn)生特定的響應(yīng)效果。( × )【結(jié)果分析】當(dāng)一個對象發(fā)出消息時, 由于接收對象的類型可能不同, 所以,它們可能做出不同的反應(yīng)。這樣,一個消息可以產(chǎn)生不同的響應(yīng)效果,這種現(xiàn)象叫做多態(tài)。( 5) 類的設(shè)計和類的繼承機制實現(xiàn)

7、了軟件模塊的可重用性。( )( 6) C+語言和 Java 語言均不是一個純正的面向?qū)ο蟮某绦蛟O(shè)計的語言。( × )【結(jié)果分析】Java 語言是一個純正的面向?qū)ο蟮某绦蛟O(shè)計語言。2/21.( 7) 學(xué)習(xí) C+語言是學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計方法的唯一途徑。(× )【結(jié)果分析】程序設(shè)計方法是獨立于具體程序設(shè)計語言的一種技術(shù),學(xué)習(xí) C+語言是學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計方法的重要途徑之一。( 8) 在 C+語言中,類是支持?jǐn)?shù)據(jù)封裝的工具。( )五、 簡答題( 1) 什么是結(jié)構(gòu)化程序設(shè)計方法?它有哪些優(yōu)點和缺點?【問題解答】結(jié)構(gòu)化程序設(shè)計方法著眼于系統(tǒng)要實現(xiàn)的功能, 從系統(tǒng)的輸入輸出出發(fā),

8、分析系統(tǒng)要做哪些事情,進而考慮如何做這些事情, 自頂向下地對系統(tǒng)的功能進行分解,來建立系統(tǒng)的功能結(jié)構(gòu)和相應(yīng)的程序模塊結(jié)構(gòu), 有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護。隨著程序規(guī)模與復(fù)雜性的增長, 這種面向過程的結(jié)構(gòu)化程序設(shè)計方法存在明顯的不足之處。首先是數(shù)據(jù)安全性問題。 由于數(shù)據(jù)被每個模塊所共用, 因此是不安全的,一旦出錯,很難查明原因。其次是可維護性及可重用性差。它把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨立的實體,一旦數(shù)據(jù)結(jié)構(gòu)需要改變時,常常要涉及整個程序,修改工作量極大并容易產(chǎn)生新的錯誤。 每一種相對于老問題的新方法都要帶來額外的開銷。另外,圖形用戶界面的應(yīng)

9、用程序,很難用過程來描述和實現(xiàn),開發(fā)和維護也都很困難。( 2) 什么是面向?qū)ο蟪绦蛟O(shè)計方法?它有哪些優(yōu)點?【問題解答】面向?qū)ο蟮某绦蛟O(shè)計方法中, 將程序設(shè)計為一組相互協(xié)作的對象而不是一組相互協(xié)作的函數(shù)。在程序中,屬性用數(shù)據(jù)表示,用來描述對象靜態(tài)特征; 行為用程序代碼實現(xiàn),用來描述對象動態(tài)特征??梢?,在面向?qū)ο蟮某绦蛟O(shè)計方法中,對象是數(shù)據(jù)結(jié)構(gòu)和算法的封裝體。 對象之間存在各種聯(lián)系, 它們之間通過消息進行通信。程序可表示為:程序 =對象 +消息在面向?qū)ο蟪绦蛟O(shè)計中應(yīng)著重于類的設(shè)計。類正是面向?qū)ο笳Z言的基本程序模塊,通過類的設(shè)計來完成實體的建模任務(wù)。 類通過一個簡單的外部接口與外界發(fā)生關(guān)系。一個類中

10、的操作不會處理到另一個類中的數(shù)據(jù), 這樣程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。 程序的執(zhí)行取決于事件發(fā)生的順序, 由順序產(chǎn)生的消息來驅(qū)動程序的執(zhí)行。 不必預(yù)先確定消息產(chǎn)生的順序, 更符合客觀世界的實際。并且面向?qū)ο蟪绦蛟O(shè)計方法提供了軟件重用、 解決大問題和復(fù)雜問題的有效途徑,具有抽象性、封裝性、繼承性和多態(tài)性等特點。( 3) 結(jié)構(gòu)化程序設(shè)計方法與面向?qū)ο蟪绦蛟O(shè)計方法在對待數(shù)據(jù)結(jié)構(gòu)和算法關(guān)系上有 什么不同?【問題解答】結(jié)構(gòu)化程序設(shè)計方法中,把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨立的實體; 而在面向?qū)ο蟪绦蛟O(shè)計中,數(shù)據(jù)結(jié)構(gòu)和算法封裝在一起, 結(jié)合成一個獨立的單位, 即對象,并盡可能隱蔽對象的內(nèi)部細(xì)

11、節(jié)。 對象的私有屬性只能由這個對象的行為來讀取和修改,與外部的聯(lián)系通過公有行為充當(dāng)外部接口。3/21.第2章從 C到 C+面向?qū)ο蟪绦蛟O(shè)計教程(C+語言描述)題解與課程設(shè)計指導(dǎo)第 2 章從 C 到C+一、 名詞解釋引用內(nèi)聯(lián)函數(shù)重載函數(shù)【問題解答】所謂引用就是給對象取一個別名, 使用該別名可以存取該對象。 換句話說是使新對象和原對象共用一個地址。內(nèi)聯(lián)函數(shù)是使用inline關(guān)鍵字聲明的函數(shù)。重載函數(shù)指在同一個作用域內(nèi)名字相同而參數(shù)不同的函數(shù)。 重載函數(shù)通常用來對具有相似行為而數(shù)據(jù)類型或數(shù)據(jù)個數(shù)不同的操作提供個通用的名稱。二、 填空題( 1) 一般情況下,用 C+語言編寫的程序是由函數(shù)加上類組成的。

12、( 2) C+ 有兩種注釋符號,一種是 / ,另一種是 /*/ 。( 3) 使用 C+風(fēng)格的輸入輸出,在程序中必須包含頭文件“ iostream ”。( 4) cin 是預(yù)定義的標(biāo)準(zhǔn)輸入流對象, >>是輸入操作符,也稱提取運算符。( 5) cout 是預(yù)定義的標(biāo)準(zhǔn)輸出流對象, <<是輸出操作符,也稱插入運算符。( 6) 指針的值是它所指向那個對象的地址值。指針的類型是它所指向?qū)ο蟮念愋?。指針的?nèi)容便是它所指向?qū)ο蟮闹?。?7) C+ 使用運算符 &來定義一個引用,對引用的存取都是對它所引用的對象的存取。( 8) 當(dāng)一個函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前時, 必須先用函數(shù)

13、原型對函數(shù)進行聲明。( 9) C+ 有值傳遞和引用傳遞兩種參數(shù)傳遞機制。( 10) 使用關(guān)鍵字 inline 聲明的函數(shù)稱為內(nèi)聯(lián)函數(shù)。4/21.( 11) 運算符 new用于進行動態(tài)內(nèi)存分配, 運算符 delete 用于釋放動態(tài)分配的內(nèi)存。( 12) 下面程序的輸出結(jié)果為 x=10,y=10;x=100,y=100。#include<iostream>using namespace std;int main()int x=10,&y=x;cout<<"x="<<x<<" ,y="<<y&

14、lt;<endl;int *p=&y;*p=100;cout<<"x="<<x<<" ,y="<<y<<endl;return 0;三、 選擇題(至少選一個,可以多選)( 1) 在整型指針變量p2、p3 的定義中,錯誤的是(A)。A. int p1, *p2 ,p3;B. int*p2,p1,*p3;C. int p1, *p2=&p1,*p3;D. int*p2,p1,*p3=&p1;【結(jié)果分析】指針定義的具體格式如下所示:<類型 > *< 指針

15、名 1>,*<指針名 2>, ;( 2) 若有定義“ double xx=3.14 , *pp=&xx; ”,則 *pp 等價于(C)。A. &xxB. *xxC. 3.14D. xx【結(jié)果分析】pp 指向 xx 所在的內(nèi)存單元,這樣 *pp 和 xx 等價。( 3) 下面對引用的描述中( C )是錯誤的。 A. 引用是某個變量或?qū)ο蟮膭e名B. 建立引用時,要對它初始化5/21.C. 對引用初始化可以使用任意類型的變量D. 引用與其代表的對象具有相同的地址【結(jié)果分析】所謂引用就是給對象取一個別名, 使用該別名可以存取該對象, 所以對引用初始化必須使用同類型的變

16、量。( 4) 函數(shù)沒有返回值的時候,應(yīng)該選擇( A )的函數(shù)類型。A. voidB. intC.不確定D. float( 5) 在函數(shù)的定義格式中,下面各組成部分中,(D)是可以省略的。A. 函數(shù)名B.函數(shù)體C.返回值類型D.函數(shù)參數(shù)【結(jié)果分析】函數(shù)的定義可以缺省形式參數(shù),此時稱為無參函數(shù)。( 6) 對重載的函數(shù)來說,下面敘述不正確的是(D)。A. 參數(shù)的類型不同B. 參數(shù)的順序不同C. 參數(shù)的個數(shù)不同D. 參數(shù)的個數(shù)、類型、順序都相同,但函數(shù)的返回值類型不同【結(jié)果分析】對重載的函數(shù)來說, 編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個數(shù)來判斷使用哪一個函數(shù),所以重載函數(shù)參數(shù)的個數(shù)、類型、順序不能都相同。(

17、 7) 下列有關(guān)設(shè)置函數(shù)參數(shù)默認(rèn)值的描述中,(D)是正確的。A. 對設(shè)置函數(shù)參數(shù)默認(rèn)值的順序沒有任何規(guī)定B. 函數(shù)具有一個參數(shù)時不能設(shè)置默認(rèn)值C. 默認(rèn)參數(shù)要設(shè)置在函數(shù)的原型中,而不能設(shè)置在函數(shù)的定義語句中D. 設(shè)置默認(rèn)參數(shù)可使用表達式,但表達式中不可用局部變量【結(jié)果分析】在 C+中,在函數(shù)原型中可以為一個或多個參數(shù)指定默認(rèn)值。對函數(shù)參數(shù)設(shè)置默認(rèn)值要注意以下幾點。若沒有聲明函數(shù)原型, 參數(shù)的默認(rèn)值可在函數(shù)定義的頭部進行設(shè)置,否則必須在函數(shù)原型中進行設(shè)置。在一個指定了默認(rèn)值的參數(shù)右邊不能出現(xiàn)沒有指定默認(rèn)值的參數(shù)。設(shè)置默認(rèn)參數(shù)可使用表達式,但表達式中不可用局部變量。( 8) 下面說法正確的是( B

18、C )。 A. 所有的函數(shù)都可以說明為內(nèi)聯(lián)函數(shù)B. 具有循環(huán)語句、 switch 語句的函數(shù)不能說明為內(nèi)聯(lián)函數(shù)C. 使用內(nèi)聯(lián)函數(shù),可以加快程序執(zhí)行的速度,但會增加程序代碼的大小D. 使用內(nèi)聯(lián)函數(shù),可以減小程序代碼大小,但使程序執(zhí)行的速度減慢【結(jié)果分析】內(nèi)聯(lián)函數(shù)主要是解決程序的運行效率問題。 在程序編譯時, 編譯系統(tǒng)將程序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進行替換, 進而減少了程序運行的時間, 但會增加程序代碼的大小。它是以空間換取時間,因此內(nèi)聯(lián)函數(shù)適用于功能不太復(fù)雜,但要求被頻繁調(diào)用的函數(shù)。( 9) 一個函數(shù)功能不太復(fù)雜,但要求被頻繁調(diào)用,應(yīng)選用(A)。A. 內(nèi)聯(lián)函數(shù)B.重載函數(shù)C.遞歸函數(shù)D.

19、嵌套函數(shù)6/21.( 10) C+ 對 C 語言做了很多改進,下列描述中使得C 語言發(fā)生了質(zhì)變,即從面向過程變成面向?qū)ο蟮氖牵―)。A. 增加了一些新的運算符B. 允許函數(shù)重載,并允許設(shè)置默認(rèn)參數(shù)C. 規(guī)定函數(shù)說明必須用原型D. 引進了類和對象的概念【結(jié)果分析】面向?qū)ο?=對象 +類+繼承 +消息 +多態(tài)四、 判斷題( 1) C+程序中,不得使用沒有定義或說明的變量。( )( 2) 使用 const 說明常量時,可以不必指出類型。(× )【結(jié)果分析】如果用 const定義的是一個整型常量,則類型說明符int可以省略。( 3) 引用被創(chuàng)建時可以用任意變量進行初始化。(× )【

20、結(jié)果分析】對引用初始化必須使用同類型的變量。( 4) 一個返回引用的調(diào)用函數(shù)可以作為左值。( )( 5) 函數(shù)可以沒有參數(shù),也可以沒有返回值。( )( 6) 沒有參數(shù)的兩個函數(shù)是不能重載的。( )( 7)函數(shù)可設(shè)置默認(rèn)參數(shù),但不允許將一個函數(shù)的所有參數(shù)都設(shè)置為默認(rèn)參數(shù)。( × )【結(jié)果分析】函數(shù)可設(shè)置默認(rèn)參數(shù),且允許將一個函數(shù)的所有參數(shù)都設(shè)置為默認(rèn)參數(shù)。( 8) 運算符 new 分配的空間由運算符 delete 釋放。( )五、 簡答題( 1) 名字空間的用途是什么?【問題解答】名字空間用來防止命名的沖突。( 2) 引用有何用處?【問題解答】除了獨立引用外,在 C+程序中,引用的主要

21、用途是用作函數(shù)參數(shù)和函數(shù)的返回值。( 3) 比較值調(diào)用和引用調(diào)用的相同點與不同點。【問題解答】在值調(diào)用機制中,作為實參的表達式的值被復(fù)制到由對應(yīng)的形參名所標(biāo)識的一個對象中,作為形參的初始值。 函數(shù)體對形參的訪問、 修改都是在這個標(biāo)識對象上操作的,與實參無關(guān),即數(shù)據(jù)的傳遞是單向的。使用引用作函數(shù)的形參時, 調(diào)用函數(shù)的實參要用變量名。 實參傳遞給形參, 相當(dāng)于在被調(diào)用函數(shù)中使用了實參的別名。 于是,在被調(diào)用函數(shù)中對形參的操作實質(zhì)是對實參的直接操作,即數(shù)據(jù)的傳遞是雙向的。( 4) 內(nèi)聯(lián)函數(shù)有什么作用?它有哪些特點?【問題解答】內(nèi)聯(lián)函數(shù)是使用 inline 關(guān)鍵字聲明的函數(shù)。在程序編譯時,編譯系統(tǒng)將程

22、序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進行替換,進而減少了程序運行的時間。7/21.使用內(nèi)聯(lián)函數(shù)應(yīng)注意以下幾點。遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)一般適合于不含有 switch 和 while 等復(fù)雜的結(jié)構(gòu)且只有 15 條語句的小函數(shù),否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。內(nèi)聯(lián)函數(shù)只能先定義后使用,否則編譯系統(tǒng)也將該函數(shù)視為普通函數(shù)。對內(nèi)聯(lián)函數(shù)也不能進行異常接口聲明。( 5)函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎?【問題解答】不必一致。所有的參數(shù)是根據(jù)位置和類型而不是名字來區(qū)分的。( 6) 重載函數(shù)時通過什么來區(qū)分?【問題解答】編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個數(shù)來判斷

23、使用哪一個函數(shù)。六、 程序分析題(寫出程序的輸出結(jié)果,并分析結(jié)果)#include<iostream>using namespace std;int main()int num=50;int& ref=num;ref=ref+10;cout<<"num="<<num<<endl;num=num+40;cout<<"ref="<<ref<<endl;return 0;【輸出結(jié)果】num=60ref=1008/21.【問題分析】本題主要考查引用的含義?!窘Y(jié)果分析】程序

24、首先定義一個 int 類型的對象 num,并給它賦初始值 50。然后又定義了一個 int 類型的引用 ref ,并將它和 num相聯(lián)系。這樣,無論是對 num還是對 ref 進行操作,實際上都是對那個一開始放著 50 的物理單元的內(nèi)容進行操作。七、 程序設(shè)計題寫出一個完整的 C+程序,使用系統(tǒng)函數(shù) pow(x,y)計算 xy 的值,注意包含頭文件 cmath?!締栴}分析】本題主要考查簡單的輸入輸出和標(biāo)準(zhǔn)庫函數(shù)的調(diào)用方法?!窘忸}思路】 由于要用到系統(tǒng)函數(shù)pow( x, y),所以要包含頭文件cmath。 要計算 xy 的值,首先必須知道 x 和 y 的值。為了程序的通用性, 最好通過交互的方式輸

25、入 x 和 y 的值。【參考程序】/ xt2_1.cpp#include<iostream>#include<cmath>using namespace std;int main()float x,y;cout<<"please input 2 floats to x,y:"cin>>x>>y;float z=pow(x,y) ;cout<<"pow ("<<x<<" ,"<<y<<" )="&l

26、t;<z<<endl;return 0;9/21.【輸出結(jié)果】please input 2 floats to x, y:3.1 2pow( 3.1 ,2)=9.61第3章類與對象面向?qū)ο蟪绦蛟O(shè)計教程(C+語言描述)題解與課程設(shè)計指導(dǎo)第 3 章類與對象一、 填空題( 1) 類定義中關(guān)鍵字 private 、public 和 protected 以后的成員的訪問權(quán)限分別是私有、公有和保護。如果沒有使用關(guān)鍵字,則所有成員默認(rèn)定義為 private 權(quán)限。具有 public 訪問權(quán)限的數(shù)據(jù)成員才能被不屬于該類的函數(shù)所直接訪問。( 2) 定義成員函數(shù)時,運算符“”是作用域運算符,“

27、MyClass”用于表明其后的成員函數(shù)是在“MyClass 類”中說明的。( 3) 在程序運行時,通過為對象分配內(nèi)存來創(chuàng)建對象。在創(chuàng)建對象時,使用類作為樣板,故稱對象為類的實例。( 4) 假定 Dc 是一個類,則執(zhí)行“ Dc a 10, b(2)”語句時,系統(tǒng)自動調(diào)用該類構(gòu)造函數(shù)的次數(shù)為 11。【結(jié)果分析】創(chuàng)建 10 個數(shù)組元素需調(diào)用構(gòu)造函數(shù) 10 次,創(chuàng)建對象 b 需調(diào)用構(gòu)造函數(shù) 1 次,所以系統(tǒng)自動調(diào)用該類構(gòu)造函數(shù)的總次數(shù)為 11。( 5) 對于任意一個類,析構(gòu)函數(shù)的個數(shù)最多為 1 個。( 6) delete 運算符通常用于實現(xiàn)釋放該類對象中指針成員所指向的動態(tài)存儲空間的任務(wù)。10/21.

28、( 7) C+ 程序的內(nèi)存格局通常分為 4 個區(qū): 數(shù)據(jù)區(qū)、代碼區(qū)、棧區(qū)和堆區(qū)。( 8) 數(shù)據(jù)定義為全局變量,破壞了數(shù)據(jù)的 封裝性; 較好的解決辦法是將所要共享的數(shù)據(jù)定義為類的 靜態(tài)成員。( 9) 靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)可由 任意訪問權(quán)限許可的函數(shù)訪問。( 10)友元函數(shù)和友元類統(tǒng)稱為友元。( 11) 友元的正確使用能提高程序的效率, 但破壞了類的封裝性和數(shù)據(jù)的隱蔽性。( 12)若需要把一個類A 定義為一個類 B 的友元類,則應(yīng)在類 B 的定義中加入一條語句: friend class A;。二、 選擇題(至少選一個,可以多選)( 1) 以下不屬于類訪問權(quán)限的是( B )。A. publi

29、c B. staticC. protectedD. private【結(jié)果分析】類的訪問權(quán)限有 public 、protected 和 private 。( 2) 有關(guān)類的說法不正確的是( BC )。A. 類是一種用戶自定義的數(shù)據(jù)類型B. 只有類的成員函數(shù)才能訪問類的私有數(shù)據(jù)成員C. 在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是公有的D. 在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是私有的【結(jié)果分析】類是一種用戶自定義的數(shù)據(jù)類型,類中成員均具有一種訪問權(quán)限。關(guān)鍵字public 、protected 和 private 以后的成員的訪問權(quán)限分別是公有、 保護和私有的,所有成員默認(rèn)定義為 private

30、 的。私有成員是被隱藏的數(shù)據(jù),只有該類的成員函數(shù)或友元函數(shù)才可以訪問它。( 3)在類定義的外部,可以被任意函數(shù)訪問的成員有(C)。A. 所有類成員B. private或 protected的類成員C. public的類成員D. public或 private的類成員【結(jié)果分析】類是一種用戶自定義的數(shù)據(jù)類型, 類中成員均具有一種訪問權(quán)限。 公有成員定義了類的外部接口。 私有成員是被隱藏的數(shù)據(jù), 只有該類的成員函數(shù)或友元函數(shù)才可以引用它。保護成員具有公有成員和私有成員的雙重性質(zhì), 可以被該類或派生類的成員函數(shù)或友元函數(shù)引用。 可見在類定義的外部, 可以被任意函數(shù)訪問的成員是 public 的類成員

31、。( 4) 關(guān)于類和對象的說法( C )是錯誤的。 A. 對象是類的一個實例B. 任何一個對象只能屬于一個具體的類 C. 一個類只能有一個對象D. 類與對象的關(guān)系和數(shù)據(jù)類型與變量的關(guān)系相似【結(jié)果分析】C+語言的類就是一種用戶自己定義的數(shù)據(jù)類型,類和對象的關(guān)系就相當(dāng)于基本數(shù)據(jù)類型與它的變量的關(guān)系, 所以任何一個對象只能屬于一個具體的類, 但一個類可以有多個對象。11/21.( 5) 設(shè) MClass 是一個類, dd 是它的一個對象, pp 是指向 dd 的指針, cc 是 dd 的引用,則對成員的訪問,對象 dd 可以通過( B )進行,指針 pp 可以通過( D )進行,引用 cc 可以通過

32、( B )進行。A. B.C.&D.->( 6) 關(guān)于成員函數(shù)的說法中不正確的是( C )。 A. 成員函數(shù)可以無返回值B. 成員函數(shù)可以重載C. 成員函數(shù)一定是內(nèi)聯(lián)函數(shù)D. 成員函數(shù)可以設(shè)定參數(shù)的默認(rèn)值【結(jié)果分析】與普通函數(shù)不同的是, 成員函數(shù)是屬于某個類的。 成員函數(shù)的實現(xiàn), 可以放在類體內(nèi),也可以放在類體外。在類體外實現(xiàn)的成員函數(shù)不再是內(nèi)聯(lián)函數(shù)。( 7) 下面對構(gòu)造函數(shù)的不正確描述是( B )。 A. 系統(tǒng)可以提供默認(rèn)的構(gòu)造函數(shù)B. 構(gòu)造函數(shù)可以有參數(shù),所以也可以有返回值 C. 構(gòu)造函數(shù)可以重載D. 構(gòu)造函數(shù)可以設(shè)置默認(rèn)參數(shù)【結(jié)果分析】構(gòu)造函數(shù)不能指定返回類型, 即使是 v

33、oid 類型也不可以, 當(dāng)然不可能有返回值。( 8) 假定 A 是一個類,那么執(zhí)行語句“ A a, b(3), *p ; ”調(diào)用了( B )次構(gòu)造函數(shù)。A.1B.2C.3D.4【結(jié)果分析】聲明指針是不會調(diào)用構(gòu)造函數(shù)的。( 9) 下面對析構(gòu)函數(shù)的正確描述是( AC )。 A. 系統(tǒng)可以提供默認(rèn)的析構(gòu)函數(shù)B. 析構(gòu)函數(shù)必須由用戶定義 C. 析構(gòu)函數(shù)沒有參數(shù)D. 析構(gòu)函數(shù)可以設(shè)置默認(rèn)參數(shù)【結(jié)果分析】析構(gòu)函數(shù)的作用是在對象消失時執(zhí)行一項清理任務(wù)。 如果一個類中沒有定義析構(gòu)函數(shù),系統(tǒng)將自動生成一個默認(rèn)析構(gòu)函數(shù)。 析構(gòu)函數(shù)沒有參數(shù), 當(dāng)然不可能設(shè)置默認(rèn)參數(shù)。( 10) 類的析構(gòu)函數(shù)是( D )時被調(diào)用的。

34、A. 類創(chuàng)建B.創(chuàng)建對象C.引用對象D.釋放對象( 11) 創(chuàng)建一個類的對象時,系統(tǒng)自動調(diào)用( B ); 撤銷對象時,系統(tǒng)自動調(diào)用( C )。A. 成員函數(shù) B. 構(gòu)造函數(shù) C. 析構(gòu)函數(shù) D. 復(fù)制構(gòu)造函數(shù)( 12) 通??截悩?gòu)造函數(shù)的參數(shù)是( C )。A. 某個對象名B.某個對象的成員名C. 某個對象的引用名D.某個對象的指針名( 13) 關(guān)于 this指針的說法正確的是(B )。A. this指針必須顯式說明B. 當(dāng)創(chuàng)建一個對象后, this指針就指向該對象C. 成員函數(shù)擁有 this指針 D. 靜態(tài)成員函數(shù)擁有this指針。12/21.【結(jié)果分析】this 指針是由 C+編譯器自動產(chǎn)生

35、且較常用的一個隱含對象指針, 它不能被顯式聲明。當(dāng)創(chuàng)建一個對象時, this 指針就初始化指向該對象。但只有非靜態(tài)成員函數(shù)才擁有 this 指針,并通過該指針來處理對象。( 14) 下列關(guān)于子對象的描述中,( B )是錯誤的。 A. 子對象是類的一種數(shù)據(jù)成員,它是另一個類的對象B. 子對象可以是自身類的對象C. 對子對象的初始化要包含在該類的構(gòu)造函數(shù)中D. 一個類中能含有多個子對象作其成員【結(jié)果分析】子對象不可以是自身類的對象。( 15) 對 new運算符的下列描述中,( B )是錯誤的。 A. 它可以動態(tài)創(chuàng)建對象和對象數(shù)組B. 用它創(chuàng)建對象數(shù)組時必須指定初始值 C. 用它創(chuàng)建對象時要調(diào)用構(gòu)造

36、函數(shù)D. 用它創(chuàng)建的對象數(shù)組可以使用運算符 delete 來一次釋放【結(jié)果分析】使用運算符 new 創(chuàng)建對象數(shù)組的格式如下:new < 類型說明符 > <算術(shù)表達式 >其中,<算術(shù)表達式 >給出數(shù)組的大小, 后面不能再跟構(gòu)造函數(shù)參數(shù), 所以用它創(chuàng)建對象數(shù)組時不能指定初始值。( 16)對 delete運算符的下列描述中,(D )是錯誤的。A. 用它可以釋放用 new運算符創(chuàng)建的對象和對象數(shù)組B. 用它釋放一個對象時,它作用于一個 new所返回的指針C. 用它釋放一個對象數(shù)組時,它作用的指針名前須加下標(biāo)運算符D. 用它可一次釋放用 new運算符創(chuàng)建的多個對象【結(jié)

37、果分析】用 delete 一次只能釋放用 new創(chuàng)建的 1 個對象,但可釋放一個對象數(shù)組。( 17) 關(guān)于靜態(tài)數(shù)據(jù)成員,下面敘述不正確的是( C )。A. 使用靜態(tài)數(shù)據(jù)成員,實際上是為了消除全局變量B. 可以使用“對象名 . 靜態(tài)成員”或者“類名靜態(tài)成員”來訪問靜態(tài)數(shù)據(jù)成員C. 靜態(tài)數(shù)據(jù)成員只能在靜態(tài)成員函數(shù)中引用D. 所有對象的靜態(tài)數(shù)據(jù)成員占用同一內(nèi)存單元【結(jié)果分析】靜態(tài)數(shù)據(jù)成員可以在靜態(tài)成員函數(shù)中引用,也可以在非靜態(tài)成員函數(shù)中引用。( 18) 對靜態(tài)數(shù)據(jù)成員的不正確描述是( CD )。A. 靜態(tài)成員不屬于對象,是類的共享成員B. 靜態(tài)數(shù)據(jù)成員要在類外定義和初始化C. 調(diào)用靜態(tài)成員函數(shù)時要通

38、過類或?qū)ο蠹せ睿?所以靜態(tài)成員函數(shù)擁有 this 指針D. 只有靜態(tài)成員函數(shù)可以操作靜態(tài)數(shù)據(jù)成員【結(jié)果分析】13/21.this 指針是一個局部量,局部于某個對象,而靜態(tài)成員函數(shù)是屬于整個類而不是某個對象,它沒有 this 指針。靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)均可操作靜態(tài)數(shù)據(jù)成員。( 19) 下面的選項中,靜態(tài)成員函數(shù)不能直接訪問的是(D )。A. 靜態(tài)數(shù)據(jù)成員B.靜態(tài)成員函數(shù)C. 類以外的函數(shù)和數(shù)據(jù)D.非靜態(tài)數(shù)據(jù)成員【結(jié)果分析】由于靜態(tài)成員函數(shù)沒有 this 指針,它只能直接訪問該類的靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)和類以外的函數(shù)和數(shù)據(jù), 訪問類中的非靜態(tài)數(shù)據(jù)成員必須通過參數(shù)傳遞方式得到對象名,然后

39、通過對象名來訪問。( 20) 在類的定義中,引入友元的原因是(A)。A. 提高效率B.深化使用類的封裝性C. 提高程序的可讀性D.提高數(shù)據(jù)的隱蔽性【結(jié)果分析】友元的作用主要是為了提高效率和方便編程,但友元破壞了類的封裝性和隱蔽性,使用時要權(quán)衡利弊。( 21) 友元類的聲明方法是(A )。A. friend class<類名 >;B. youyuan class<類名 >;C. class friend<類名 >;D. friends class<類名 >;( 22) 下面對友元的錯誤描述是( D )。 A. 關(guān)鍵字 friend 用于聲明友元B.

40、 一個類中的成員函數(shù)可以是另一個類的友元 C. 友元函數(shù)訪問對象的成員不受訪問特性影響 D. 友元函數(shù)通過 this 指針訪問對象成員【結(jié)果分析】友元函數(shù)是一個放在類中的普通函數(shù),它沒有 this 指針。( 23) 下面選項中,( C )不是類的成員函數(shù)。A. 構(gòu)造函數(shù) B. 析構(gòu)函數(shù) C. 友元函數(shù) D. 拷貝構(gòu)造函數(shù)三、 簡答題( 1) 類與對象有什么關(guān)系?【問題解答】類是一種用戶自己定義的數(shù)據(jù)類型, 和其他數(shù)據(jù)類型不同的是, 組成這種類型的不僅可以有數(shù)據(jù), 而且可以有對數(shù)據(jù)進行操作的函數(shù)。 程序員可以使用這個新類型在程序中聲明新的變量, 具有類類型的變量稱為對象。 創(chuàng)建對象時, 類被用做

41、樣板,對象稱為類的實例。( 2) 類定義的一般形式是什么?其成員有哪幾種訪問權(quán)限?【問題解答】定義類一般形式為:class 類名 public:<公有數(shù)據(jù)和函數(shù) >14/21.protected:<保護數(shù)據(jù)和函數(shù) >private:<私有數(shù)據(jù)和函數(shù) >訪問權(quán)限共有 3 種:分別是公有(public )、保護(protected )和私有(private )。( 3) 類的實例化是指創(chuàng)建類的對象還是定義類?【問題解答】指創(chuàng)建類的對象。( 4) 什么是 this 指針?它的主要作用是什么?【問題解答】this 指針是 C+語言為成員函數(shù)提供的一個隱含對象指針,它

42、不能被顯式聲明。 this 指針是一個局部量,局部于某個對象。不同的對象調(diào)用同一個成員函數(shù)時,編譯器根據(jù) this 指針來確定應(yīng)該引用哪一個對象的數(shù)據(jù)成員。( 5) 什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時被調(diào)用?【問題解答】拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù), 它的作用是用一個已經(jīng)存在的對象去初始化另一個對象。為了保證所引用的對象不被修改,通常把引用參數(shù)聲明為 const 參數(shù)。在以下 3 種情況下,拷貝構(gòu)造函數(shù)都會被自動調(diào)用:當(dāng)用類的一個對象去初始化該類的另一個對象時;當(dāng)函數(shù)的形參是類的對象,進行形參和實參結(jié)合時;當(dāng)函數(shù)的返回值是類的對象,函數(shù)執(zhí)行完成返回調(diào)用者時。四、 程序分析題(寫出程序的

43、輸出結(jié)果,并分析結(jié)果)( 1)#include<iostream>using namespace std;class Testprivate:int num;15/21.public:Test () ;/默認(rèn)構(gòu)造函數(shù)Test (int n); /帶一個參數(shù)構(gòu)造函數(shù);Test Test ()cout<<"Init defa"<<endl;num=0;Test Test ( int n)cout<<"Init"<<" "<<n<<endl;num=n;in

44、t main()Test x 2 ;/語句 1Test y ( 15); /語句 2return 0;【輸出結(jié)果】Init defa16/21.Init defaInit 15【問題分析】本題主要考查構(gòu)造函數(shù)的調(diào)用時機和構(gòu)造函數(shù)的匹配問題。【要點提示】構(gòu)造函數(shù)在創(chuàng)建對象時被自動調(diào)用, 具體調(diào)用哪個構(gòu)造函數(shù)將由編譯系統(tǒng)根據(jù)重載函數(shù)的匹配原則來確定?!窘Y(jié)果分析】 程序聲明了 2 個對象 x 和 y,類中有 2 個構(gòu)造函數(shù)。 程序首先執(zhí)行語句1,創(chuàng)建對象 x,調(diào)用默認(rèn)構(gòu)造函數(shù)。 由于對象 x 是對象數(shù)組,每個數(shù)組元素被創(chuàng)建時都要調(diào)用構(gòu)造函數(shù),所以默認(rèn)構(gòu)造函數(shù)被調(diào)用了 2 次,輸出第 1、2 行結(jié)果。

45、程序接著執(zhí)行語句 2,創(chuàng)建對象 y,調(diào)用帶一個參數(shù)的構(gòu)造函數(shù),輸出第 3 行結(jié)果。( 2)#include<iostream>using namespace std;class Xxprivate:int num;public:Xx(int x) num=x; /構(gòu)造函數(shù)Xx() cout<<"dst "<<num<<endl; /析構(gòu)函數(shù);int main()Xx w(5); /語句 1cout<<"Exit main"<<endl; /語句 217/21.return 0;【輸出

46、結(jié)果】Exit maindst 5【問題分析】本題主要考查析構(gòu)函數(shù)的調(diào)用時機?!疽c提示】析構(gòu)函數(shù)在釋放對象時被自動調(diào)用?!窘Y(jié)果分析】 程序聲明了一個對象w。 程序首先執(zhí)行語句 1,創(chuàng)建對象 w,調(diào)用構(gòu)造函數(shù), num得到初值 5。程序接著執(zhí)行語句 2,輸出第 1 行結(jié)果。當(dāng)程序結(jié)束時,釋放對象 w,析構(gòu)函數(shù)被調(diào)用,輸出第 2 行結(jié)果。( 3) 將例 3.10 中的 Whole 類如下修改,其他部分不變,寫出輸出結(jié)果。class Wholepublic:Whole(int i) ; / Whole的有參構(gòu)造函數(shù)Whole() ; / Whole的無參構(gòu)造函數(shù)Whole() ;/ Whole的析構(gòu)函數(shù)private:Part p1;/子對象 1Part p2;/子對象 2Part p3;/子對象 3;18/21.WholeWhole( int i):p2 (i ), p1()cout<<"Constructo

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論