




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車位使用權(quán)轉(zhuǎn)移合同協(xié)議
- 房地產(chǎn)開發(fā)合同書
- 標(biāo)準(zhǔn)車位租賃合同模板
- 土地征收補(bǔ)償合同實(shí)施細(xì)則
- 品牌代理合作合同權(quán)利轉(zhuǎn)讓協(xié)議
- 醫(yī)用耗材供應(yīng)合同
- 腎上腺皮質(zhì)激素及其相關(guān)藥物的臨床藥理學(xué)課件
- 文化展覽客戶需求挖掘考核試卷
- 拖拉機(jī)品牌建設(shè)與傳播考核試卷
- 機(jī)床制造業(yè)生產(chǎn)效率提升與精益生產(chǎn)考核試卷
- 2025人教版一年級下冊數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫作指令
- 休學(xué)復(fù)學(xué)申請書
- 北京2025年02月北京市地質(zhì)礦產(chǎn)勘查院所屬事業(yè)單位公開招考工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- DeepSeek零基礎(chǔ)到精通手冊(保姆級教程)
- 瓷磚鋪貼勞務(wù)承包協(xié)議書
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 新建污水處理廠工程EPC總承包投標(biāo)方案(技術(shù)標(biāo))
- 《宏觀經(jīng)濟(jì)管理研究》課件
- 蘇教版五年級下冊數(shù)學(xué)全冊教案設(shè)計(jì)
- GB/T 36548-2024電化學(xué)儲能電站接入電網(wǎng)測試規(guī)程
評論
0/150
提交評論