面向?qū)ο蟪绦蛟O(shè)計(jì)總練習(xí)與答案_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)總練習(xí)與答案_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)總練習(xí)與答案_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)總練習(xí)與答案_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)總練習(xí)與答案_第5頁
已閱讀5頁,還剩261頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

大學(xué)考試試題紙(A卷)

(2007-2008學(xué)年第1學(xué)期)

一、簡答題(每小題5分,共20分)

1、什么是類?什么是對象?對象與類的關(guān)系是什么?

2、構(gòu)造函數(shù)和析構(gòu)函數(shù)的主要作用是什么?他們各有什么特性?

3、有哪幾種繼承方式?每種方式的派生類對基類成員的繼承性如何?

4、簡要敘述友元運(yùn)算符函數(shù)和成員運(yùn)算符函數(shù)有什么不同點(diǎn)?

二、選擇題(每小題2分,共20分)

1.假設(shè)己經(jīng)有定義constchar*pName="Student”;下面的語句錯(cuò)誤的是。

A.pName[3]='t';B.pName=''score";

C.pName=newchar[5];D.pName=newcharCp');

2.在下面有關(guān)對構(gòu)造函數(shù)的描述中,錯(cuò)誤的是。

A.構(gòu)造函數(shù)可以帶有返回值

B.構(gòu)造函數(shù)的名字與類名完全相同

C.構(gòu)造函數(shù)可以帶有參數(shù)

構(gòu)造函數(shù)可以缺省

3.在下面有關(guān)析構(gòu)函數(shù)特征的描述中,正確的是。

A.一個(gè)類中可以定義多個(gè)析構(gòu)函數(shù)

B.析構(gòu)函數(shù)名與類名完全相同

C.析構(gòu)函數(shù)不能指定返回類型

D.析構(gòu)函數(shù)可以有一個(gè)或多個(gè)參數(shù)

4.假定AB為一個(gè)類,則執(zhí)行“ABa(4),b[3],*p[2];”語句時(shí),自動調(diào)用該類構(gòu)造函數(shù)的次數(shù)

為。

A.3B.4C.6D.9

5.假定要對類AB定義加號操作符重載成員函數(shù),實(shí)現(xiàn)兩個(gè)AB類對象的加法,并返回相加結(jié)果,

則該成員函數(shù)的聲明語句為。

A.ABoperator+(AB&a,AB&b)B.ABoperator+(AB&a)

C.operator+(ABa)D.AB&operator+()

6.假設(shè)定義了函數(shù)模版:

template<classT>

Tmax(Tx,Ty){return(x>y)?x:y;}

并定義了:inti;chare;那么下列錯(cuò)誤的調(diào)用該模版的是。

A.max(i,i);B.max(c,c);

C.max(int(c),i);D.max(c,i);

7.模版的主要用途是為了。

A.提高代碼的運(yùn)行效率

B.實(shí)現(xiàn)多態(tài)性

C.提高代碼的重用性

D.加強(qiáng)類的封裝性

8.下列說法錯(cuò)誤的是。

A.申明為指向基類對象的指針可以指向它的公有派生的對象,但不允許指向它的私有派生的對象

B.允許將一個(gè)聲明為指向基類的指針指向其公有派生類的對象,但是不能將一個(gè)聲明為指向派生類

對象的指針指向其基類的一個(gè)對象。

C.聲明為指向基類對象的指針,當(dāng)其指向公有派生類對象時(shí),只能用它來直接訪問派生類中從基類

繼承來的成員,而不能直接訪問公有派生類中定義的成員

D.以上說法都不對

9.現(xiàn)有程序如下:

#include<iostream.h>

#include<iomanip.h>

voidmain(){

intkk=1234;

cout?setfillC*,)<<setw(6)<<kk?endl;

cout?kk?endl;

以上程序的運(yùn)行結(jié)果是。

A.1234B.**1234C.**1234D.以上都不對

12341234**1234

10.在公有繼承的情況下,基類成員在派生類中的訪問權(quán)限。

A.受限制B.保持不變C.受保護(hù)D.不受保護(hù)

三、填空題(每空1分,共10分)

1、定類AB中有一個(gè)公有屬性的靜態(tài)數(shù)據(jù)成員bb,在類外不通過對象名訪問該成員bb的寫法

為⑴。

2、通常情況下,當(dāng)創(chuàng)建派生類對象時(shí),首先執(zhí)行(2)的構(gòu)造函數(shù),隨后再執(zhí)行(3)的

構(gòu)造函數(shù),當(dāng)撤銷派生類對象時(shí),則先執(zhí)行(4)的析構(gòu)函數(shù),隨后再執(zhí)行(5)的析構(gòu)

函數(shù)。

3、ios類中有幾個(gè)成員函數(shù)可以用來對輸入輸出進(jìn)行格式化控制,格式控制主要是通過對(6)的

操作來完成的。

4、所謂賦值兼容規(guī)則是指在需要基類對象的任何地方都可以使用(7)來替代。

純虛函數(shù)是一個(gè)在基類中說明卻沒定義的虛函數(shù),但要求在它的派生類中必須定義自己的版本,或

重新說明為純虛函數(shù)。那么,純虛函數(shù)的定義形式為(8)。

5、分別寫出類AB的單目運(yùn)算符“++”的前綴方式和后綴方式的友元函數(shù)重載一般形

式:(9)、(10),,

四、寫出下面程序的運(yùn)行結(jié)果(每小題5分,共20分)

1、#include<iostream.h>

classBase{

public:

Base(){cout?"Constructingbaseclass\n";)

?Base(){cout?"Destructingbaseclass\n";}

);

classDerive:publicBase{

public:

Derive(){cout?nConstructingderivedclass\nM;};

~Derive(){cout?"Destructingderivedclass\nH;);

private:

Basea;

voidmain(){

Deriveop;

)

2、#include<iostream.h>

classBase{

public:

voidshow(){

cout?"ThisisBaseclassM?endl;

)

);

classDerive:publicBase{

public:

voidshow(){

cout?nThisisDerivedclassn?endl;

)

};

voidmain(){

Baseobj,*pBase;

DeriveD_obj;

pBase=&obj;

pBase->show();

pBase=&D_obj;

pBase->show();

)

3、#include<iostream.h>

intarr[]={23,25,27,29,31);

int&get_value(inti){

returnarr[i];

)

voidmain(){

inti;

cout?get_value(3)?endl;

get_value(2)=50;

for(i=0;i<5;i++)

cout?get_value(i)?^^“;

)

4、#include<iostream.h>

classcomplex{

public:

complex(intr,inti):real(r),imag(i){}

friendcomplexoperator++(complex&);

friendcomplexoperator—(complex);

voidprint(){

cout?',(',?real?'V,?imag?',),'?endl;

)

private:

intreal,imag;

);

complexoperator++(complex&o){

o.real++;

o.imag++;

returno;

complexoperator-(complexo){

o.real—;

o.imag—;

returno;

voidmain(){

complexa(l,2),b(3,4);

++a;

a.print();

-b;

b.print();

五、編程題(每小題10分,共30分)

1、建立一個(gè)Student類,含有私有的學(xué)號(字符型)、姓名(字符型)、年齡(整型)數(shù)據(jù)成員。用

new自動為Student的對象分配內(nèi)存,并將學(xué)號“0504020101”,姓名“張三”,年齡20存入內(nèi)存的相

應(yīng)域中,把該的信息顯示出來。

2、建立普通的基類building,用來存儲一座樓房的層數(shù)、房間數(shù)以及它的總面積數(shù)。建立派生類house,

繼承building,并存儲下面的內(nèi)容:臥室與浴室的數(shù)量,另外,建立派生類。ffice,繼承building,

并存儲滅火器與電話的書面。在主程序中,分別建立對象顯示各對象所有的數(shù)據(jù)成員。

3、為Date類重載運(yùn)算符,實(shí)現(xiàn)在某一個(gè)日期上(年、月、日)加一個(gè)天數(shù)。

試題參考答案及評分細(xì)則

(2007-2008學(xué)年第1學(xué)期)

一、簡答題(每小題5分,共20分)

1.答:類就是相同的數(shù)據(jù)和相同的一組對象的集合,即,類是對具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一

類對象的描述;對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體,

對象可以認(rèn)為是:數(shù)據(jù)+操作;類和對象之間的關(guān)系是抽象和具體的關(guān)系。

2.答:構(gòu)造函數(shù)主要用于為對象分配空間,進(jìn)行初始化。構(gòu)造函數(shù)除了具有一般成員函數(shù)的特征外,

還具有一些特殊的性質(zhì):(1)構(gòu)造函數(shù)的名字必須與類名相同(2)構(gòu)造函數(shù)可以有任意類型的參數(shù),

但不能指定返回類型。它有隱含的返回值,該值由系統(tǒng)內(nèi)部使用。(3)構(gòu)造函數(shù)是特殊的成員函數(shù),

函數(shù)體可寫在類體內(nèi),也可寫在類體外。(4)構(gòu)造函數(shù)可以重載,即一個(gè)類中可以定義多個(gè)參數(shù)個(gè)數(shù)或

參數(shù)類型不同的構(gòu)造函數(shù)。(5)構(gòu)造函數(shù)被聲明為公有函數(shù),但它不能像其他成員函數(shù)那樣被顯式地

調(diào)用,它是在定義對象的同時(shí)被調(diào)用的。

析構(gòu)函數(shù)也是一種特殊的成員函數(shù)。它執(zhí)行與構(gòu)造函數(shù)相反的操作,通常用于撤消對象時(shí)的一些清理

任務(wù),如釋放分配給對象的內(nèi)存空間等。析構(gòu)函數(shù)有以下一些特點(diǎn):(1)析構(gòu)函數(shù)與構(gòu)造函數(shù)名字相

同,但它前面必須加一個(gè)波浪號(~);(2)析構(gòu)函數(shù)沒有參數(shù),也沒有返回值,而且不能重載。因此在一

個(gè)類中只能有一個(gè)析構(gòu)函數(shù);(3)當(dāng)撤消對象時(shí),編譯系統(tǒng)會自動地調(diào)用析構(gòu)函數(shù)。

3.答:三種繼承方式(公有public、保護(hù)protected、私有private);繼承性可參見教材P143。

4.答:(1)對雙目運(yùn)算符而言,成員運(yùn)算符函數(shù)帶有一個(gè)參數(shù),而友元運(yùn)算符函數(shù)帶有兩個(gè)參數(shù);對單

目運(yùn)算符而言,成員運(yùn)算符函數(shù)不帶參數(shù),而友元運(yùn)算符函數(shù)帶一個(gè)參數(shù)。(2)雙目運(yùn)算符一般可

以被重載為友元運(yùn)算符函數(shù)或成員運(yùn)算符函數(shù),但某些情況,必須使用友元函數(shù)。

二、選擇題(每小題2分,共20分)

1-10.AABBBCCDBB

三、填空題(每空1分,共10分)

(1)AB::bb(2)基類(3)派生類(4)派生類(5)基類(6)狀態(tài)標(biāo)志字(7)公有派生類

對象(8)virtual函數(shù)類型函數(shù)名(參數(shù)表)=0;(9)ABoperator++();(10)ABoperator++(int);

四、寫出下面程序的運(yùn)行結(jié)果(每小題5分,共20分)

1.

Constructingbaseclass

Constructingbaseclass

Constructingderivedclass

Destructingderivedclass

Destructingbaseclass

Destructingbaseclass

2.ThisisBaseclass

ThisisBaseclass

3.29

2325502931

4.(2,3)

(3,4)

五、編程題(每小題10分,共30分)

略.

2006-2007學(xué)年第1學(xué)期

2005級《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》期末考試試題(A卷)

令本試卷滿分100分;

令請將答案寫在答題紙上,寫明題號,不必抄題,字跡工整、清晰;

令請?jiān)诖痤}紙和試題紙上都寫上你的班級,學(xué)號和姓名,交卷時(shí)請將試題紙、答題紙和草紙

一并交上來。

一、單選題(共10分,每題1分)

1.C++中解決命名沖突的機(jī)制是:D

(A)虛基類(B)虛函數(shù)(C)函數(shù)重載(D)名字空間

2.若類A的一個(gè)對象所占的內(nèi)存空間中包含虛函數(shù)表的入口地址,則:C

(A)類A不能有靜態(tài)數(shù)據(jù)成員(B)類A中公有的成員函數(shù)一定是虛的

(0類A中至少有一個(gè)成員函數(shù)是虛的(D)類A的析構(gòu)函數(shù)一定是虛的

3.任意一個(gè)類,析構(gòu)函數(shù)的個(gè)數(shù)最多是:B

(A)不限個(gè)數(shù)(B)1(C)2(D)3

4.下列關(guān)于this指針的說法,哪個(gè)是正確的:D

(A)this指針一定指向常量型數(shù)據(jù)(B)this指向的數(shù)據(jù)不可更改

(0靜態(tài)成員函數(shù)中也可以訪問this指針(D)this指針本身可直接作為成員函數(shù)的返回值

5.在類定義中,為說明成員的訪問權(quán)限,private,protected,public可以出現(xiàn)次數(shù)為:A

(A)次數(shù)沒有具體限定(B)每種至多一次

(0public至少一次(D)每種至少一次

6.下面哪種定義方式是正確的,并且使得p可以作為函數(shù)voidf(A*constpp);的實(shí)參:A

(A)A*p=newA;(B)Aa;A*p=a;

(C)constA*p=newA;(D)Aa;constA*p=a;

7.obj是類A的一個(gè)對象,執(zhí)行語句constA&aA=obj;,則下列說法正確的是:C

(A)類A的拷貝構(gòu)造函數(shù)會被調(diào)用(B)類A的賦值函數(shù)會被調(diào)用

(0&aA的值就是&obj(D)語句obj.f();等價(jià)于語句aA.f():

8.下面關(guān)于訪問類A的私有數(shù)據(jù)成員的說法,錯(cuò)誤的是:C

(A)類A的友元函數(shù)可以訪問類A的私有成員。

(B)類A的友元類中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。

(0類A的嵌套類中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。

(D)類A中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。

9.類A中有唯一的一個(gè)成員函數(shù)f,且f是公有的靜態(tài)或非靜態(tài)成員函數(shù),對于類A的一個(gè)對

象a,執(zhí)行語句a.f(100);成功,那么f的函數(shù)原型不可以是:B

(A)A&f(int,int=50);(B)voidf(int&)

(C)constA*f(constint);(D)Af(constint&);

10.下面關(guān)于類的成員函數(shù)描述不正確的是:A

(A)靜態(tài)成員函數(shù)內(nèi)可以直接訪問類的非靜態(tài)成員數(shù)據(jù)

(B)靜態(tài)成員函數(shù)內(nèi)可以直接訪問類的靜態(tài)成員數(shù)據(jù)

(0非靜態(tài)成員函數(shù)可以直接訪問類的非靜態(tài)成員數(shù)據(jù)

(D)非靜態(tài)成員函數(shù)可以直接訪問類的靜態(tài)成員數(shù)據(jù)(全局成員)

二、判斷正誤,對于你認(rèn)為錯(cuò)誤的論述,說明原因或舉出反例。(每題2分,共20分)

1.重載流操作符<<和>>時(shí),如果第一個(gè)參數(shù)的類型為。stream和istream,那么這個(gè)重載函數(shù)既

可以用于標(biāo)準(zhǔn)輸入輸出流,也可以用于文件流上。

對,ostream和istream是標(biāo)準(zhǔn)輸入輸出流、文件流、字符串流的基類

2.在同一個(gè)類中,可以定義重載的成員函數(shù)voidf(int);和virtualvoidf(int);?

錯(cuò),這屬于重復(fù)定義

3.抽象類不會產(chǎn)生實(shí)例,所以不需要有構(gòu)造函數(shù)。

錯(cuò),被派生時(shí)需要它的構(gòu)造函數(shù)

4.類A有一個(gè)非靜態(tài)的成員函數(shù)f,其函數(shù)原型是:voidA::f()const,則該函數(shù)被調(diào)用時(shí),一

定是通過類A或類A的某后裔類的一個(gè)用const修飾符說明的常量對象調(diào)用的。

錯(cuò),常函數(shù)可以由變量對象或常量對象調(diào)用

5.異常必須在其產(chǎn)生的當(dāng)前函數(shù)中捕獲,而不能在外層函數(shù)中捕獲該異常。

錯(cuò),可以在外層捕獲,并且這是最常見的用法

6.只要程序中沒有Aal=a2;和Aal(a2);形式的代碼,類A的拷貝構(gòu)造函數(shù)就不會被調(diào)用。

錯(cuò),參數(shù)傳遞或函數(shù)返回時(shí)也調(diào)用拷貝構(gòu)造函數(shù)

7.在protected繼承方式下,派生類對象的指針不能直接轉(zhuǎn)換成指向基類對象的指針。

對,否則基類中的公有成員由不可見變?yōu)榭梢姡瑱?quán)限被放大

8.若靜態(tài)成員函數(shù)中調(diào)用了一個(gè)函數(shù)f,那么f一定不是虛函數(shù)。

對,靜態(tài)成員函數(shù)不能是虛函數(shù),因?yàn)樘摵瘮?shù)入口需要在保存在對象中的虛函數(shù)

表中,而靜態(tài)成員函數(shù)不屬于對象。

9.若要實(shí)例化一個(gè)含有引用型數(shù)據(jù)成員的類,那么只能使用構(gòu)造函數(shù)初始化列表來初始化該數(shù)據(jù)

成員。

對,沒有別的辦法

10.構(gòu)造函數(shù)的函數(shù)體中,不能使用return語句;但在實(shí)現(xiàn)該類的自動類型轉(zhuǎn)化函數(shù)時(shí),必須有

return語句。

三、回答下列各題(每題4分,共20分)

1.舉例說明static關(guān)鍵字的用法和相應(yīng)目的(至少3種)。

f(){staticinta;-}函數(shù)體內(nèi)的靜態(tài)變量,每次調(diào)用該函數(shù)時(shí)值保持不變

staticinta;全局的靜態(tài)變量,約束作用域?yàn)樗谖募?/p>

classA{staticinta;—};A的靜態(tài)成員,類似全局變量,需用A::a訪問

2.舉例說明類的數(shù)據(jù)成員在哪些情況下必須在初始化列表中進(jìn)行初始化(至少3種)。

基類不提供無參的構(gòu)造函數(shù)

成員對象不提供無參的構(gòu)造函數(shù)

有常量成員或引用成員

3.舉例說明虛擬繼承的作用和目的。

虛擬繼承的目的是使基類在派生類中只保留一個(gè)副本

從而避免二義性

4.舉例說明成員函數(shù)A&f()const;和成員函數(shù)A&f();的區(qū)別。

A&f()const是常函數(shù),隱含的this指針是常指針,因此在f中不能修改對象成員的值。

舉例略

5.有類A的對象a,任意給出一種解決方案,使得程序支持下面的表達(dá)式:

a=10+a;

classA{

A(int);〃轉(zhuǎn)換構(gòu)造函數(shù)

friendconstAoperator+(constA,constA);〃重載+

);

四、指出下列程序代碼中存在的錯(cuò)誤或不足,說明原因。(每題5分,共10分)

#include<iostream.h>classB:publicAvoidmain()

classA{((

public:public:A*p=newB;

virtual~A(){)virtualvoidg()p->f();

virtualvoidf(){cout?,zB::g()zz?endP->g();

{cout<<z'A::f(),z?endl;1;)p~>k();

)virtualvoidk()deletep;

virtualvoidg())

{cout<<,,B::k(),z<<endl;}

{cout?,zA::g()z,?endl;}};

);

答:函數(shù)k在A中沒有定義,執(zhí)行p->k();時(shí)要根據(jù)p的類型在A中查k的信息

2.

#include<iostream.h>classA{

#include<string.h>public:

classA;~A(){}

classB:publicA{virtualvoidoutput()()

public:);

B(constchar*info){voidmain0

mbuf=newchar[256];(

strcpy(m_buf,info);)A*pa=newB("hello!”)

~B(){delete]]m_buf;}pa->output();

virtualvoidoutput(){cout?deletepa;

mbuf;})

private:

char*mbuf;};

答:A的析構(gòu)函數(shù)應(yīng)定義為虛函數(shù),否則B的析構(gòu)函數(shù)不會被調(diào)用,m_buf也不會被釋放

五、寫出下面程序的運(yùn)行結(jié)果(每題5分,共10分)

1.

tfinclude<iostream.h>classB:publicA{voidmain()

classA{public:(

public:~B(){-count;(

A():count(1){}Out();}Bb;

virtual~A(){)virtualA*Copy()const{A*al=&b;

virtualA*Copy()const=B*p二newB(*this);al->0ut();

0;++p->count;al=al->Copy();

virtualvoidOut()constreturnp;al->0ut();

=0;)deleteal;

protected:virtualvoidOut()const)

intcount;{cout?count<<endl;})

);};

答:

1

2

1

0

2.

#include<iostream.h>classB:publicA{

classA{public:

public:B(A&a):obj(a),A(l){}

A(intn):num(n){Out();}voidOut(){obj.Out();}

A(constA&rhs):num(rhs.num)private:

(0ut();}Aobj;

voidOut(){cout<<num?endl;}};

public:voidmain(){

intnum;Aa(8);

};Bbl(a);

Bb2(bl);

b2.Out();

)

答:

8

1

8

1

8

8

六、閱讀下面兩個(gè)類的定義和部分實(shí)現(xiàn)代碼,完成3個(gè)問題。(共10分)

#include<iostream.h>classB{intmain()

classA{public:(

public:B(intn);Bbid);

A(intn):value(n){}voidDisplay()constbl.Display();

voidDisplay()const{aA.Display();}Bb2(2);

{cout?/zValue=private:b2.Display();

/z?value<<endl;}AaA;return0;

private:);)

intvalue;

);

1.[3分]實(shí)現(xiàn)類B的構(gòu)造函數(shù),使得程序的輸出為:

Value=l

Value=2

答:B(intn):aA(n)

2.[3分]若main函數(shù)中增加了語句Bb3(bl);針對本例,說明是否有必要以公有方式自定義并實(shí)

現(xiàn)類B的拷貝構(gòu)造函數(shù),為什么?

答:不需要,因?yàn)轭怋及基類A中不存在引用或指針成員,使用默認(rèn)的拷貝構(gòu)造函數(shù)就可以。

3.[4分]在不改動類A和main函數(shù)的前提下,以繼承的方式重新定義并實(shí)現(xiàn)類B,使得程序的輸

出結(jié)果不變。

答:

classB:publicA{

public:

B(intn):A(n);

voidDisplay()const

{A::Display();}

);

七、(共20分,每問題10分)某程序員為了靈活地對各種的給定的曲線函數(shù)f(x)畫出其曲線圖形,

設(shè)計(jì)并部分實(shí)現(xiàn)了一個(gè)曲線類curve,該類的成員數(shù)據(jù)中,count代表坐標(biāo)點(diǎn)的個(gè)數(shù),pxs代表的數(shù)

組存放這些坐標(biāo)點(diǎn)的橫坐標(biāo),pys代表的數(shù)組存放利用f(x)計(jì)算得到的這些坐標(biāo)點(diǎn)的縱坐標(biāo)。由于

不同曲線的計(jì)算公式f(x)是不同的,該程序員希望曲線函數(shù)的種類可以通過繼承curve類的方式任

意增加,增加一個(gè)新的f(x)時(shí)不改變curve類中的內(nèi)容,也不改變利用curve類進(jìn)行圖形繪制的算

法。己部分完成的curve類定義和實(shí)現(xiàn)如下:

classcurve{

public:

voidsetPxs(){/*把獲取的橫坐標(biāo)數(shù)據(jù)存放在pxs代表的數(shù)組中,并為count置值*/)

double*getPxs()const{returnpxs;}

intgetCount()const{returncount;}

double*getPys()const;

private:

double*pxs;

double*pys;

intcount

};

1、請按照該程序員的設(shè)計(jì)意圖給出成員函數(shù)getPys的完整實(shí)現(xiàn)。實(shí)現(xiàn)過程中,可以為curve類增

加其它成員??梢约僭O(shè)setPxs函數(shù)已經(jīng)完整實(shí)現(xiàn),不需要考慮曲線的繪制和顯示。

答:

classcurve{

public:

voidsetPxs(){/*把獲取的橫坐標(biāo)數(shù)據(jù)存放在pxs代表的數(shù)組中,并為count置值*/)

double*getPxs()const{returnpxs;}

intgetCount()const{returncount;}

double*getPys()const;

virtualdoublef(double)=0;

private:

double*pxs;

double*pys;

intcount

};

double*curve::getPys()const

(

if(pys-NULL)pys=newdoubletcount];

for(inti=0;i〈count;i++)

pys[i]=f(pxs[i]);

returnpys;

)

注:嚴(yán)格來講,還應(yīng)在析構(gòu)函數(shù)中釋放pxs和pys,但這部分不作為要考的語法點(diǎn),

故此處略掉

2、以曲線函數(shù):f(x)=3*x*x+2*x+l.為例,從curve派生一個(gè)類curvel,并用文字說明其它的函數(shù)

(如:main函數(shù))如何利用基類curve中的getPys函數(shù)獲取該曲線的縱坐標(biāo)值。

答:

classcurvel:publiccurve

(

virtualdoublef(doublex){return3*x*x+2*x+l;}

};

《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷(A)

班級:姓名:學(xué)號:分?jǐn)?shù):

試卷說明:本套試題共四個(gè)大題,全部題目都答在答題紙上,寫在其他地方均無效。

(答題紙?jiān)诒咎自嚲淼牡?0頁上)

一、選擇題(每小題2分,共40分)

1>C++是()。

A.面向?qū)ο蟮某绦蛟O(shè)計(jì)語言

B.面向過程的程序設(shè)計(jì)語言

C.既支持面向?qū)ο蟮某绦蛟O(shè)計(jì)又支持面向過程的程序設(shè)計(jì)的混合型語言

D.非結(jié)構(gòu)化的程序設(shè)計(jì)語言

2、面向?qū)ο蟪绦蛟O(shè)計(jì)思想的主要特征中不包括()o

A.封裝性B.多態(tài)性C.繼承性D.功能分解,逐步求精

3、若定義:stringstr;當(dāng)語句cin?str;執(zhí)行時(shí),從鍵盤輸入:

MicrosoftVisualStudio6.0!

所得的結(jié)果是str=()。

A.MicrosoftVisualStudio6.0!B.Microsoft

C.MicrosoftVisualD.MicrosoftVisualStudio6.0

4、考慮下面的函數(shù)原型聲明:voidtestDefaulParam(inta,intb=7,charz='*');

下面函數(shù)調(diào)用中,不合法的是()。

A.testDefaulParam(5);B.testDefaulParam(5,8);

C.testDefaulParam(5,';D.testDefaulParam(O,0,';

5、下列語句中,將函數(shù)intsum(intx,inty)正確重載的是()(,

A.floatsum(intx,inty);B.intsum(inta,intb);

C.floatsum(floatx,floaty);D.doublesum(inty,intx);

6、下列表示引用的方法中,()是正確的。

已知:inta=1000;

A.int&x=a;B.char&y;C.int&z=1000;D.float&t=&a;

7、在一個(gè)函數(shù)中,要求通過函數(shù)來實(shí)現(xiàn)一種不太復(fù)雜的功能,并且要求加快執(zhí)行速度,選用()。

A.內(nèi)聯(lián)函數(shù)B.重載函數(shù)C.遞歸調(diào)用D.嵌套調(diào)用

8、下列有關(guān)C++類的說法中,不正確的是(

A.類是一種用戶自定義的數(shù)據(jù)類型

B.只有類中的成員函數(shù)或類的友元函數(shù)才能存取類中的私有成員

C.在類中,如果不做特別說明,所有成員的訪問權(quán)限均為私有的

D.在類中,如果不做特別說明,所有成員的訪問權(quán)限均為公用的

9、已知X類,則當(dāng)程序執(zhí)行到語句:Xarray[3];時(shí),調(diào)用了()次構(gòu)造函數(shù)。

A.0B.1C.2D.3

10、下面說法中,正確的是()

A.一個(gè)類只能定義一個(gè)構(gòu)造函數(shù),但可以定義多個(gè)析構(gòu)函數(shù)

B.一個(gè)類只能定義一個(gè)析構(gòu)函數(shù),但可以定義多個(gè)構(gòu)造函數(shù)

C.構(gòu)造函數(shù)與析構(gòu)函數(shù)同名,只要名字前加了一個(gè)求反符號(~)

D,構(gòu)造函數(shù)可以指定返回類型,而析構(gòu)函數(shù)不能指定任何返回類型,即使是void類型也不可以

11、已知:print()函數(shù)是一個(gè)類的常成員函數(shù),它無返回值,下列表示中,()是正確的。

A.voidprint()const;B.constvoidprint();

C.voidconstprint();D.voidprint(const);

12、下面描述中,表達(dá)錯(cuò)誤的是()

A.公用繼承時(shí)基類中的public成員在派生類中仍是public的

B.公用繼承時(shí)基類中的private成員在派生類中仍是private的

C.公用繼承時(shí)基類中的protected成員在派生類中仍是protected的

D.私有繼承時(shí)基類中的public成員在派生類中是private的

13、設(shè)置虛基類的目的是()。

A.簡化程序B.消除二義性C.提高運(yùn)行效率D.減少目標(biāo)代碼

14、下面()的敘述不符合賦值兼容規(guī)則。

A.派生類的對象可以賦值給基類的對象

B.基類的對象可以賦值給派生類的對象

C.派生類的對象可以初始化基類的對象

D.派生類的對象的地址可以賦值給指向基類的指針

15、關(guān)于虛函數(shù)的描述中,()是正確的。

A.虛函數(shù)是一個(gè)static類型的成員函數(shù)

B.虛函數(shù)是一個(gè)非成員函數(shù)

C.基類中說明了虛函數(shù)后,派生類中與其對應(yīng)的函數(shù)可不必說明為虛函數(shù)

D.派生類的虛函數(shù)與基類的虛函數(shù)具有不同的參數(shù)個(gè)數(shù)和類型

16、下面關(guān)于友元的描述中,錯(cuò)誤的是()。

A.友元函數(shù)可以訪問該類的私有數(shù)據(jù)成員

B.一個(gè)類的友元類中的成員函數(shù)都是這個(gè)類的友元函數(shù)

C.友元可以提高程序的運(yùn)行效率

D.類與類之間的友元關(guān)系可以繼承

17、下列關(guān)于靜態(tài)數(shù)據(jù)成員的說法,不正確的是()。

A.類中定義的公用靜態(tài)數(shù)據(jù)成員,可以通過類的對象來訪問

B.類中定義的所有靜態(tài)數(shù)據(jù)成員,都必須在類外初始化

C.靜態(tài)數(shù)據(jù)成員不是所有對象所共用的

D.普通的成員函數(shù)可以直接訪問類中的靜態(tài)數(shù)據(jù)成員

18、如果表達(dá)式++i*k中的“++”和“*”都是重載的友元運(yùn)算符,若采用運(yùn)算符函數(shù)調(diào)用格式,則

表達(dá)式還可以表示為()。

A.operator*(i.operator++(),k)B.operator*(operator++(i),k)

C.i.operator++().operator*(k)D.k.operator*(operator++(i))

19、下面對模板的聲明,正確的是()?

A.template<T>B.template<classTl,T2>

C.template<classTl,classT2>D.template<classT1;classT2>

20、下列的各類函數(shù)中,()不是類的成員函數(shù)

A.構(gòu)造函數(shù)B,析構(gòu)函數(shù)C.友元函數(shù)D.復(fù)制構(gòu)造函數(shù)

二、填空題(前14個(gè)空,每空1分,后3個(gè)空,每空2分,共20分)

1、類和對象的關(guān)系可表述為:類是對象的,而對象則是類的。

2、靜態(tài)成員函數(shù)沒有隱含的,所以,在C++程序中,靜態(tài)成員函數(shù)主要用來訪問靜態(tài)數(shù)據(jù)

成員,而不訪問非靜態(tài)成員。

3、在圖1中,A,B,C,D,E,F均是類,其中屬于單繼承的派生類有,屬于多繼承的派生

類有,類F的基類有,類A的派生類有。

4、如果只想保留公共基類的一個(gè)復(fù)制,就必須使用關(guān)鍵字把這個(gè)公共基類聲明為虛基

類。

5、從實(shí)現(xiàn)的角度來講,多態(tài)性可以劃分為兩類:和o

6、如果一個(gè)類包含一個(gè)或多個(gè)純虛函數(shù),則該類稱為o

7、若要把voidfun()定義為類A的友元函數(shù),則應(yīng)在類A的定義中加入語句。

8、列出C++中的兩種代碼復(fù)用方式:和o

9、析構(gòu)函數(shù)的作用是o

10、假定A是一個(gè)類名,則該類的拷貝構(gòu)造函數(shù)的原型說明語句為:o

11、后置自增運(yùn)算符“++”重載為類的成員函數(shù)(設(shè)類名為A)的形式為:o

三、閱讀下面4個(gè)程序,寫出程序運(yùn)行時(shí)輸出的結(jié)果。(共13分)

1、

#include<iostream>

usingnamespacestd;

voidfun(int&a,int&b)

{intp;

p=a;a=b;b=p;

)

voidexchange(int&a,int&b,int&c)

{if(a<b)fun(a,b);

if(a<c)fun(a,c);

if(b<c)fun(b,c);

)

intmain()

{inta=12,b=89,c=56;

exchange(a,b,c);

cout<<,,a=,,?a<</,,b=,,<<b?/,,c=,,<<c?endl;

return0;

)

2、

#include<iostream>

usingnamespacestd;

classA{

public:

A(){cout?〃A〃;}

};

classB{

public:

B(){cout<<"B";}

);

classC:publicA{

public:

C(){cout?〃C〃;)

private:

Bb;

);

intmain(){

Cobj;

return0;

)

3、

#include<iostream>

usingnamespacestd;

classA

{public:

A(){cout?,zA::A()called.\nz,;}

virtual"A(){cout<<,zA::"A()called.\n,z;}

);

classB:publicA

{public:

B(inti)

{cout?,zB::B()called.\nz/;

buf=newchar[i];

)

virtual~B()

{delete[]buf;

cout?/zB::~B()called.\nz,;

)

private:

char*buf;

);

intmain()

{A*a=newB(15);

deletea;

return0;

)

4、

#include<iostream>

usingnamespacestd;

classA

{public:

voidf(){cout?z,CallA'sfunctionf()/z?endl;}

);

classB

{public:

voidf(){cout?z,CallB'sfunctionf(),z<<endl;}

voidg(){cout?z,CallB'sfunctiong()“?endl;}

);

classC:publicA,publicB

{public:

voidg(){cout?z,CallC'sfunctiong()^?endl;}

);

intmain()

{Ccc;

cc.B::f();

cc.B::g();

cc.g();

return0;

)

四、編程題(27分)

IN(10分)已知復(fù)數(shù)類Complex的聲明如下:

classComplex

{public:

Complex();〃無參構(gòu)造函數(shù)

Complex(double);〃轉(zhuǎn)換構(gòu)造函數(shù)

Complex(double,double);〃有兩個(gè)形參的構(gòu)造函數(shù)

friendComplexoperator+(Complex&,Complex&);〃對”運(yùn)算符進(jìn)行重載

friendostream&operator?(ostream&,Complex&);〃對運(yùn)算符進(jìn)行重載

friendistream&operator>>(istream&,Complex&);〃對">>”運(yùn)算符進(jìn)行重載

private:

doublereal,imag;

);

要求:(1)寫出該類的所有構(gòu)造函數(shù)的類外定義代碼。

(2)寫出對運(yùn)算符“+進(jìn)行重載的運(yùn)算符重載函數(shù)的定義。

2、(17分)下列Shape類是一個(gè)表示形狀的抽象類,area()為求圖形面積的函數(shù),total()則是一

個(gè)通用的用以求不同形狀的圖形面積總和的函數(shù)。

classShape

{public:

virtualdoublearea()=0;

);

doubletotal(Shape*s[],intn)

{doublesum=0.0;

for(inti=0;i<n;i++)sum+=s[i]->area();

returnsum;

要求:(1)從Shape類派生圓類(Circle)、正方形類(Square),圓類新增數(shù)據(jù)成員半徑(radius),

正方形類新增數(shù)據(jù)成員邊長(a),圓類和正方形類都有構(gòu)造函數(shù),修改、顯示數(shù)據(jù)成員值的函數(shù),

求面積函數(shù)。

(2)寫出main。函數(shù),計(jì)算半徑為5.5的圓和邊長為9.9的正方形的面積和(必須通過調(diào)用

total函數(shù)計(jì)算)。

《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷(A)標(biāo)準(zhǔn)答案

班級:姓名:學(xué)號:分?jǐn)?shù):

一、單項(xiàng)選擇題(每小題2分,共40分)

1-5.CDBCC6-10.AADDB

11-15.ABBBC16-20.DCBCC

二、填空題(前14個(gè)空,每空1分,后3個(gè)空,每空2分,共20分)

1.抽象實(shí)例2.this指針

3.ED、FA、B、C、D、ED、F

4.virtual5,靜態(tài)多態(tài)性動態(tài)多態(tài)性

6.抽象類7.friendvoidfun(A&a)

8.繼承組合或模板

9.在對象被系統(tǒng)釋放之前做一些內(nèi)存清理工作_______________________________

10.A(constA&)11.Aoperator++(int)

三、閱讀程序(13分)

INa=89,b=56,c=12

2、ABC

3、A::A()called.

B::B()called.

B::~B()called.

A::~A()called.

4、CallB,sfunctionf()

Cal1B'sfunctiong()

CallC'sfunctiong()

四、編程題(共27分)

1、(10分)

Complex::Complex(){real=0;imag=0;}

Complex::Complex(doubler){real=r;}

Complex::Complex(doubler,doublei){real=r;imag=i;}

Complexoperator+(Complex&cl,Complex&c2)

{Complexc;

c.real=cl.real+c2.real;c.imag=cl.imag+c2.imag;

returnc;

)

ostreamfeoperator?(ostream&output,Complexfcc)

{output?,z("<<c.real<<"+〃<〈c.imag<</zi),,<<endl;

returnoutput;

)

istreamfeoperator?(istreamfcinput,Complex&c)

{cout?^inputrealandimaginarypartofcomplexnumber:

input?c.real?c.imag;

returninput;

)

2、(17分)

classCircle:publicShape

{public:

Circle(doubler){radius=r;}

voidset()

{cout?^Pleaseinputthevalueofthecircle:,z<<endl;

cin?radius;

)

voidshow()

{cout?^theradiusofthecircle=,/<<radius<<endl;}

doublearea(){return3.14159*radius*radius;}

private:

doubleradius;

);

classSquare:publicShape

{public:

Square(doublea){this->a=a;}

voidset()

{cout<<z,Pleaseinputthevalueofa:z,?endl;

cin?a;

}

voidshow()

{cout<<,,a=",?a<<endl;}

doublearea(){returna*a;}

private:

doublea;

};

intmain()

(

CircleC(5.5);

C.show();

SquareS⑼9);

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論