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

下載本文檔

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

文檔簡(jiǎn)介

《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷(B)試卷說(shuō)明:本套試題共四個(gè)大題,全部題目都答在答題紙上,寫(xiě)在其他地方均無(wú)效。(答題紙?jiān)诒咎自嚲淼牡?頁(yè)上)一、單項(xiàng)選擇題(每小題2分,共40分)1、 關(guān)于C++與C語(yǔ)言關(guān)系的描述中,(D)是錯(cuò)誤的。C語(yǔ)言是C++語(yǔ)言的一個(gè)子集 B.C語(yǔ)言與C++語(yǔ)言是兼容的C.C++語(yǔ)言對(duì)C語(yǔ)言進(jìn)行了一些改進(jìn) D.C++語(yǔ)言和C語(yǔ)言都是面向?qū)ο蟮?、 已知:intm=10;下列表示引用的方法中,(A)是正確的。A.int&x=m; B.int&y=10; C.int&z; D.float&t=&m;3、 考慮下面的函數(shù)原型聲明:voidtestDefaulParam(inta,intb=7,charz='*');下面函數(shù)調(diào)用中,不合法的是(C)。A.testDefaulParam(5); B.testDefaulParam(5,8);C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*');4、 系統(tǒng)在調(diào)用重載函數(shù)時(shí)往往根據(jù)一些條件確定哪個(gè)重載函數(shù)被調(diào)用,在下列選項(xiàng)中,不能作為依據(jù)的是(A)。函數(shù)的返回值類(lèi)型B.參數(shù)的類(lèi)型 C.函數(shù)名稱(chēng)D.參數(shù)個(gè)數(shù)5、 下列有關(guān)C++類(lèi)的說(shuō)法中,不正確的是(D).類(lèi)是一種用戶(hù)自定義的數(shù)據(jù)類(lèi)型只有類(lèi)中的成員函數(shù)或類(lèi)的友元函數(shù)才能存取類(lèi)中的私有成員在類(lèi)中,如果不做特別說(shuō)明,所有成員的訪問(wèn)權(quán)限均為私有的在類(lèi)中,如果不做特別說(shuō)明,所有成員的訪問(wèn)權(quán)限均為公用的6、 已知X類(lèi),則當(dāng)程序執(zhí)行到語(yǔ)句Xarray[3];時(shí),調(diào)用了(D)次構(gòu)造函數(shù)。A.0 B.1 C.2 D.37、有關(guān)析構(gòu)函數(shù)的說(shuō)法,不正確的是(B)。析構(gòu)函數(shù)有且僅有一個(gè)析構(gòu)函數(shù)和構(gòu)造函數(shù)一樣可以有形參析構(gòu)函數(shù)的功能是在系統(tǒng)釋放對(duì)象之前作一些內(nèi)存清理工作析構(gòu)函數(shù)無(wú)任何函數(shù)類(lèi)型8、類(lèi)定義的內(nèi)容允許被其對(duì)象無(wú)限制地存取的是( C)。A.private部分B.protected部分C.public部分 D.以上都不對(duì)9、關(guān)于常數(shù)據(jù)成員的說(shuō)法,不正確的是( )。常數(shù)據(jù)成員的定義形式與一般常變量的定義形式相同,只不過(guò)常數(shù)據(jù)成員的定義必須出現(xiàn)在類(lèi)體中常數(shù)據(jù)成員必須進(jìn)行初始化,并且不能被更新常數(shù)據(jù)成員通過(guò)構(gòu)造函數(shù)的成員初始化列表進(jìn)行初始化常數(shù)據(jù)成員可以在定義時(shí)直接初始化10、 運(yùn)用運(yùn)算符delete刪除一個(gè)動(dòng)態(tài)對(duì)象時(shí)( )。系統(tǒng)首先為該動(dòng)態(tài)對(duì)象調(diào)用構(gòu)造函數(shù),再釋放其占用的內(nèi)存系統(tǒng)首先釋放該動(dòng)態(tài)對(duì)象占用的內(nèi)存,再為其調(diào)用構(gòu)造函數(shù)系統(tǒng)首先為該動(dòng)態(tài)對(duì)象調(diào)用析構(gòu)函數(shù),再釋放其占用的內(nèi)存系統(tǒng)首先釋放動(dòng)態(tài)對(duì)象占用的內(nèi)存,再為其調(diào)用析構(gòu)函數(shù)11、 可以在類(lèi)外用p.a的形式訪問(wèn)派生類(lèi)對(duì)象p的基類(lèi)成員a,其中&是(D)。A.私有繼承的公用成員 B.公用繼承的私有成員C.公用繼承的保護(hù)成員 D.公用繼承的公用成員12、在公用繼承方式下,有關(guān)派生類(lèi)對(duì)象和基類(lèi)對(duì)象的關(guān)系,不正確的敘述是( )派生類(lèi)的對(duì)象可以賦給基類(lèi)的對(duì)象派生類(lèi)的對(duì)象可以初始化基類(lèi)的引用派生類(lèi)的對(duì)象可以直接訪問(wèn)基類(lèi)中的成員派生類(lèi)的對(duì)象的地址可以賦給指向基類(lèi)的指針13、設(shè)置虛基類(lèi)的目的是(B)。A.簡(jiǎn)化程序 B.消除二義性C.提咼運(yùn)行效率D.減少目標(biāo)代碼14、在C++中,用于實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性的是(D).A.內(nèi)聯(lián)函數(shù) B.重載函數(shù)C.模板函數(shù)D.虛函數(shù)15、不能說(shuō)明為虛函數(shù)的是( )。A.析構(gòu)函數(shù) B.構(gòu)造函數(shù)C.類(lèi)的成員函數(shù)D.以上都不對(duì)16、如果一個(gè)類(lèi)至少有一個(gè)純虛函數(shù),那么就稱(chēng)該類(lèi)為()。A.抽象類(lèi) B.派生類(lèi)C.純基類(lèi)D.以上都不對(duì)17、下面關(guān)于友元的描述中,錯(cuò)誤的是( )。友元函數(shù)可以訪問(wèn)該類(lèi)的私有數(shù)據(jù)成員—個(gè)類(lèi)的友元類(lèi)中的成員函數(shù)都是這個(gè)類(lèi)的友元函數(shù)友??梢蕴釂J程序的運(yùn)行效率類(lèi)與類(lèi)之間的友元關(guān)系可以繼承18、下列運(yùn)算符中,( )運(yùn)算符在C++中不能被重載。A.&& B.[] C.:: D.newTOC\o"1-5"\h\z19、 模板的使用實(shí)際上是將類(lèi)模板實(shí)例化成一個(gè)( )。A.函數(shù) B.對(duì)象 C.類(lèi) D.抽象類(lèi)20、假定MyClass為一個(gè)類(lèi),則該類(lèi)的拷貝構(gòu)造函數(shù)的聲明語(yǔ)句為( )。A.MyClass(MyClassx) B.MyClass&(MyClassx)C.MyClass(MyClass&x) D.MyClass(MyClass*x)二、填空題(前16個(gè)空,每空1分,后2個(gè)空,每空2分,共20分)1、類(lèi)和對(duì)象的關(guān)系可表述為:類(lèi)是對(duì)象的 ,而對(duì)象則是類(lèi)的 。2、在C++中,三種繼承方式的說(shuō)明符號(hào)為 、 和 ,如果不加說(shuō)明,則默認(rèn)的繼承方式為 .3、如果只想保留公共基類(lèi)的一個(gè)復(fù)制,就必須使用關(guān)鍵字 把這個(gè)公共基類(lèi)聲明為虛基類(lèi)。4、 若要把voidfun()定義為類(lèi)A的友元函數(shù),則應(yīng)在類(lèi)A的定義中加入語(yǔ)句 。5、類(lèi)的靜態(tài)成員分為 和 .6、運(yùn)算符重載要求保持其原來(lái)的操作數(shù)個(gè)數(shù)、 、 和語(yǔ)法結(jié)構(gòu)。7、通過(guò)關(guān)鍵字 可以聲明模板,通過(guò)關(guān)鍵字 指定函數(shù)模板的類(lèi)型參數(shù),有幾個(gè)類(lèi)型參數(shù)就有幾個(gè)類(lèi)型關(guān)鍵字。TOC\o"1-5"\h\z8、列出C++中兩種用戶(hù)自定義的數(shù)據(jù)類(lèi)型: 、 .9、構(gòu)造函數(shù)的作用是 .10、后置自增運(yùn)算符“++"重載為類(lèi)的成員函數(shù)(設(shè)類(lèi)名為A)的形式為 .三、閱讀下面3個(gè)程序,寫(xiě)出程序運(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;classDate{public:Date(int,int,int);Date(int,int);Date(int);Date();voiddisplay();private:intmonth,day,year;};Date::Date(intm,intd,inty):month(m),day(d),year(y){}Date::Date(intm,intd):month(m),day(d){year=2009;}Date::Date(intm):month(m){day=l; year=2010; }Date::Date() {month=1;day=1;year=2010;}voidDate::display(){cout<<month〈<"/”<<day〈<”/"<〈year〈〈endl;}intmain(){Dated1(12,31,2009);Dated2(12,31);Dated3(1);Dated4;d1。display。;d2.display();d3。display();d4.display();return0; }3、#include〈iostream>usingnamespacestd;classA{public:A(){cout〈《"constructingA”<<endl;}?A(){cout〈〈''destructingA”〈〈endl;}};classB:publicA{public:B(){cout〈〈'constructingB'<<endl;}?B(){cout〈〈"destructingB"〈<endl;}};classC:publicB{public:C(){cout<〈"constructingC'<<endl;}?C(){cout〈<"destructingC'<〈endl;}};intmain(){Cc1;return0;}四、編程題(共27分)1、(10分)已知復(fù)數(shù)類(lèi)Complex的聲明如下:classComplex{public:Complex(); //無(wú)參構(gòu)造函數(shù)Complex(double); //轉(zhuǎn)換構(gòu)造函數(shù)Complex(double,double);〃有兩個(gè)形參的構(gòu)造函數(shù)friendComplexoperator+(Complex&,Complex&); //對(duì)“+”運(yùn)算符進(jìn)行重載friendostream&operator<〈(ostream&,Complex&); //對(duì)“〈<”運(yùn)算符進(jìn)行重載friendistream&operator>>(istream&,Complex&); //對(duì)“〉〉”運(yùn)算符進(jìn)行重載private:doublereal,imag;};要求:(1)寫(xiě)出該類(lèi)的所有構(gòu)造函數(shù)的類(lèi)外定義代碼。(2)寫(xiě)出對(duì)運(yùn)算符“+”、“〈〈”、“〉〉"進(jìn)行重載的運(yùn)算符重載函數(shù)的定義。2、(17分)下列Shape類(lèi)是一個(gè)表示形狀的抽象類(lèi),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類(lèi)派生圓類(lèi)(Circle)、正方形類(lèi)(Square),圓類(lèi)新增數(shù)據(jù)成員半徑(radius),正方形類(lèi)新增數(shù)據(jù)成員邊長(zhǎng)(a),圓類(lèi)和正方形類(lèi)都有構(gòu)造函數(shù),修改、顯示數(shù)據(jù)成員值的函數(shù),求面積函數(shù)。(2)寫(xiě)出main()函數(shù),計(jì)算半徑為5.5的圓和邊長(zhǎng)為9。9的正方形的面積和(必須通過(guò)調(diào)用total函數(shù)計(jì)算)。

《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷(B)標(biāo)準(zhǔn)答案一、單項(xiàng)選擇題(每小題2分,共40分)1—5.DACAD 6—10.DBCDC11-15.DCBDB 16—20.ADCCC二、填空題(前16個(gè)空,每空1分,后2個(gè)空,每空2分,共20分)1.抽象 、實(shí)例2.public 、 private 、protected、 private3.virtual 4.friendvoidfun(A&a)—結(jié)合性 、優(yōu)先級(jí)5.靜態(tài)數(shù)據(jù)成貝、靜態(tài)成貝函數(shù) 6.7.Template、class(或typename) 8.類(lèi)、 結(jié)構(gòu)體9.在創(chuàng)建對(duì)象時(shí)初始化對(duì)象的數(shù)據(jù)成員10.Aoperator++(int)三、閱讀程序(共13分)1、a=89,b=56,c=122、12/31/200912/31/20091/1/20101/1/20103、constructingAconstructingBconstructingCdestructingCdestructingBdestructingA四、編程題(共27分)1、(10分)Complex::Complex(){real=0;imag=0;}Complex::Complex(doubler){real=r;}Complex::Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c1,Complex&c2){Complexc;c.real=cl。real+c2.real;c.imag=cl.imag+c2。imag;returnc;}ostream&operator〈<(ostream&output,Complex&c){output〈<”("〈〈c.real<<”+"<<c.imag〈<"i)”<〈endl;returnoutput;}istream&operator>〉(istream&input,Complex&c){coutvv"inputrealandimaginarypartofcomplexnumber:";input〉>c。real〉>c.imag;returninput;}2、(17分)classCircle:publicShape{public:Circle(doubler){radius=r;}voidset(){cout〈〈"Pleaseinputthevalueofthecircle:”〈<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<<"Pleaseinputthevalueofa:"<<endl;cin>>a;}voidshow(){cout<<"a=”〈<a〈〈endl; }doublearea(){returna*a;}private:doublea;};intmain(){CircleC(5.5)C.show();SquareS(9。9);S.show();Shape*s[]={&C,&S};cout<<”total="<<t(otsa,l2)<〈endl;return0;《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷一、選擇題(每小題3分,共48分.)01、下列關(guān)于C++函數(shù)的敘述中,正確的是(c)。A)每個(gè)函數(shù)至少要具有一個(gè)參數(shù) B)每個(gè)函數(shù)都必須返回一個(gè)值C)函數(shù)在被調(diào)用之前必須先聲明 D)函數(shù)不能自己調(diào)用自己02、下列關(guān)于類(lèi)和對(duì)象的敘述中,錯(cuò)誤的是(A)。A)一個(gè)類(lèi)只能有一個(gè)對(duì)象 B)對(duì)象是類(lèi)的具體實(shí)例C)類(lèi)是對(duì)某一類(lèi)對(duì)象的抽象 D)類(lèi)和對(duì)象的關(guān)系是一種數(shù)據(jù)類(lèi)型與變量的關(guān)系03、在C++中,用于實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性的是(D)。A)內(nèi)聯(lián)函數(shù) B)重載函數(shù) C)模板函數(shù)D)虛函數(shù)04、下列關(guān)于運(yùn)算符重載的敘述中,正確的是(B)。A)通過(guò)運(yùn)算符重載,可以定義新的運(yùn)算符 B)有的運(yùn)算符只能作為成員函數(shù)重載C)若重載運(yùn)算符+,則相應(yīng)的運(yùn)算符函數(shù)名是+D)重載二元運(yùn)算符時(shí),必須聲明兩個(gè)形參05、對(duì)于語(yǔ)句cout〈〈x〈〈endl;錯(cuò)誤的是描述是(D )。A)“cout”是一個(gè)輸出流對(duì)象B)“endl”的作用是輸出回車(chē)換行C)“x”是一個(gè)變量 D)“〈〈”稱(chēng)作提取運(yùn)算符TOC\o"1-5"\h\z06、有如下類(lèi)聲明,則類(lèi)MyDERIVED中保護(hù)的數(shù)據(jù)成員和成員函數(shù)的個(gè)數(shù)是( )。classMyBASE{private: int k;public: void set(int n) { k=n;}intget()const{returnk;} };classMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{returnMyBASE::get()+j;}};A)4 B)3 C)2 D)107、已知在一個(gè)類(lèi)體中包含如下函數(shù)原型:Volumeoperator-(Volume)const;,下列關(guān)于這個(gè)函數(shù)的敘述中,錯(cuò)誤的是(B)。A)這是運(yùn)算符一的重載運(yùn)算符函數(shù) B)這個(gè)函數(shù)所重載的運(yùn)算符是一個(gè)一元運(yùn)算符C)這是一個(gè)成員函數(shù) D)這個(gè)函數(shù)不改變類(lèi)的任何數(shù)據(jù)成員的值08、執(zhí)行如下的程序段后,輸出結(jié)果是(C)。cout。fill('*');cout.width(6);cout°fill('#');cout<〈123〈〈endl;A)###123B)123###C)***123D)123***09、在下列函數(shù)原型中,可以作為類(lèi)AA構(gòu)造函數(shù)的是(B)。A)voidAA(int);B)intAA();C)AA(int)const;D)AA(int);10、 下面四個(gè)選項(xiàng)中,(A)是用來(lái)聲明虛函數(shù)的.A)virtualB)publicC)includeD)usingnamespace11、 實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性要使用(D )。A)重載函數(shù)B)構(gòu)造函數(shù)C)析構(gòu)函數(shù)D)虛函數(shù)12、 要實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,必須通過(guò)()調(diào)用虛函數(shù)。A)對(duì)象指針B)成員名限定C)對(duì)象名D)派生類(lèi)名13、 以下(C)成員函數(shù)表示純虛函數(shù)。A)virtualintvf(int); B)voidvf(int)=0;C)virtualvoidvf()=0; D)virtualvoidvf(int){}14、 有如下類(lèi)聲明:classXA{private:intx;

public:XA(intn){x=n;}};

classXB:publicXA{private:inty;public:XB(inta,intb); };在構(gòu)造函數(shù)XB的下列定義中,正確的是()。A)XB::XB(inta,intb):x(a),y(b){}B)XB::XB(inta,intb): XA(a),y(b){}C)XB::XB(inta,intb): x(a),XB(b){}D)XB::XB(inta,intb):XA(a),XB(b){}15、 在表達(dá)式x+y*z中,+是作為成員函數(shù)重載的運(yùn)算符,TOC\o"1-5"\h\z伙是作為非成員函數(shù)重載的運(yùn)算符。則operator+有 個(gè)參數(shù),operator*有參數(shù)。( )A)2、2 B)~2、1C)1、2 D)1、116、 應(yīng)在下列程序劃線處填入的正確語(yǔ)句是( )。classBase{public:voidfun(){cout〈〈"Base::fun"〈〈endl;}};classDerived:publicBase{voidfun(){_//顯示調(diào)用基類(lèi)的函數(shù)fun()cout〈〈"Derived::fun”〈〈endl;} };A)fun();B)Base.fun();C)Base::fun();D)Base—〉fun();二、填空題(每空2分,共20分。)17、 繼承、多態(tài)性 18、友元19、私有20、private或私有21、成員、友元22、width/setw23、抽象類(lèi)17、 面向?qū)ο蟪绦蛟O(shè)計(jì)有四個(gè)主要特點(diǎn),即抽象、封裝、_多態(tài)性—和—繼承性—。 —18、 非成員函數(shù)應(yīng)聲明為類(lèi)的—友元—函數(shù)才能訪問(wèn)這個(gè)類(lèi)的private成員。19、 派生類(lèi)中的成員不能直接訪問(wèn)基類(lèi)中的_私有、成員。20、 在用class定義一個(gè)類(lèi)時(shí),數(shù)據(jù)成員和成員函數(shù)的默認(rèn)訪問(wèn)權(quán)限是私有.21、 運(yùn)算符重載函數(shù)可能是類(lèi)的—友元—函數(shù),也可以是類(lèi)的—成員—函數(shù),還可以是普通函22、 用流對(duì)象的成員函數(shù)控制輸出格式時(shí),用于設(shè)置字段寬度的流成員函數(shù)的名稱(chēng)是_width ,與之作用相同的控制符名

稱(chēng)是__setw__。23、含有純虛函數(shù)的類(lèi)稱(chēng)為—抽象類(lèi)。三、程序的填空、程序的執(zhí)行(每題4分,共20分.)24、以下程序是定義一個(gè)計(jì)數(shù)器類(lèi)counter,對(duì)其重載運(yùn)算符“+”,請(qǐng)?zhí)羁?。classcounter24、以下程序是定義一個(gè)計(jì)數(shù)器類(lèi)counter,對(duì)其重載運(yùn)算符“+”,請(qǐng)?zhí)羁?。classcounter{private:intn;public:counter() {n=0;}counter(inti){n=i;}—//運(yùn)算符重載函數(shù){countert;t。n二n+c。n;returnt;}voiddisp(){cout〈〈”n二"〈〈n〈〈endl;}};voidmain(){countercl(5),c2(10),c3;c3=c1+c2;c1.disp();c2.disp();c3。disp();}26、寫(xiě)出執(zhí)行下面程序的輸出結(jié)果。voidfun(int&x,inty){intt二x;x=y;y二t;}intmain()25、下列程序的輸出結(jié)果為2,請(qǐng)將程序補(bǔ)充完整。classBase{public: voidfun(){cout〈〈1;}};classDerived:publicBase{public:voidfun() {cout〈〈2;}};intmain(){Base*p=newDerived;p->fun();deletep;return0; }28、寫(xiě)出執(zhí)行下面程序的輸出結(jié)果.classBase{private:charc;{intaL2]={23, 42};public:fun(a[l],a[0]);Base(charn):c(n){}std::cout〈〈a[0]〈〈“,”virtual~Base(){cout〈〈a[l]<〈std::endl;〈〈C;}return0; }};classDer:publicBase27、寫(xiě)出執(zhí)行下面程序的輸{private:出結(jié)果。charc;classA{public:A()public:{cout〈〈"A";} };Der(charn):Base(n+l),classB{public:B()c(n){}{cout〈〈"B”;}};?Der(){cout〈〈C;}classC:publicA};{Bb;intmain()public:C() {cout〈〈”C”; }};{Der("X”); return0;}intmain() {Cobj;return0; }四、編程題(12分)29、編寫(xiě)一個(gè)程序計(jì)算“三角形、正方形、圓形"三種圖形的面積,要求:a)抽象出一個(gè)基類(lèi)base;b)在其中說(shuō)明一個(gè)虛函數(shù)用來(lái)求面積;c)利用派生類(lèi)定義“三角形、正方形、圓形";d)編寫(xiě)主函數(shù)并測(cè)試。參考答案一、選擇題(每小題3分,共48分.)01-05CADBD06—10BBADA11—16DACBCC三、程序的填空、程序的執(zhí)行(每題4分,共20分。)24、counteroperator+(counterc)25、virtual26、23,2327、ABC28、XY四、編程題(12分)29、#include〈iostream>usingnamespacestd;classbase{public:virtualfloatarea()const{return0; }};classtriangle:publicbase{protected:floatbian,height;public:triangle(floata=0,floath=0) {bian=a;height=h;}virtualfloatarea()const{returnbian*height/2;}};classsquare:publicbase{protected:floatbian;public:square(floata=0){bian=a;}virtualfloatarea()const{returnbian*bian;}};classcircle:publicbase{protected:floatradius;public:circle(floatr=0){radius=r;}virtualfloatarea()const{return3。14^radiusradius;}};intmain(){trianglet(3,4);squares(5);circlec(2);base*p;p=&t;cout<<"triangle'sarea:”〈〈p—〉area()<〈endl;p=&s;cout<〈”square's area:”<〈p—>area()〈〈endl;p=&c;cout<<"circle'sarea:”〈〈p->area()〈<endl;return0;《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》期末考試試卷(A)試卷說(shuō)明:本套試題共四個(gè)大題,全部題目都答在答題紙上,寫(xiě)在其他地方均無(wú)效.(試卷說(shuō)明:本套試題共四個(gè)大題,全部題目都答在答題紙上,寫(xiě)在其他地方均無(wú)效.(答題紙?jiān)诒咎自嚲淼牡?0頁(yè)上)一、選擇題(每小題2分,共40分)1、 C++是().面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言B。 面向過(guò)程的程序設(shè)計(jì)語(yǔ)言既支持面向?qū)ο蟮某绦蛟O(shè)計(jì)又支持面向過(guò)程的程序設(shè)計(jì)的混合型語(yǔ)言D。 非結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言2、面向?qū)ο蟪绦蛟O(shè)計(jì)思想的主要特征中不包括( )。A.封裝性B.多態(tài)性 C。繼承性 D。功能分解,逐步求精3、若定義:stringstr;當(dāng)語(yǔ)句cin〉〉str;執(zhí)行時(shí),從鍵盤(pán)輸入:MicrosoftVisualStudio6.0!所得的結(jié)果是str=()。B.MicrosoftD.MicrosoftVisualStudio6。0A。 MicrosoftVisualStudioB.MicrosoftD.MicrosoftVisualStudio6。0C。MicrosoftVisual4、 考慮下面的函數(shù)原型聲明:voidtestDefaulParam(inta,intb=7,charz='*');下面函數(shù)調(diào)用中,不合法的是( )。testDefaulParam(5); B.testDefaulParam(5,8);C。testDefaulParam(5,'#'); D。testDefaulParam(0,0,'*');5、下列語(yǔ)句中,將函數(shù)intsum(intx,inty)正確重載的是( )。

A。A。floatsum(intx,inty);C。floatsum(floatx,floaty);intsum(inta,intb);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ù)中,要求通過(guò)函數(shù)來(lái)實(shí)現(xiàn)一種不太復(fù)雜的功能,并且要求加快執(zhí)行速度,選用( )。A。 內(nèi)聯(lián)函數(shù) B。重載函數(shù) C。遞歸調(diào)用 D。嵌套調(diào)用8、 下列有關(guān)C++類(lèi)的說(shuō)法中,不正確的是( )。類(lèi)是一種用戶(hù)自定義的數(shù)據(jù)類(lèi)型只有類(lèi)中的成員函數(shù)或類(lèi)的友元函數(shù)才能存取類(lèi)中的私有成員在類(lèi)中,如果不做特別說(shuō)明,所有成員的訪問(wèn)權(quán)限均為私有的在類(lèi)中,如果不做特別說(shuō)明,所有成員的訪問(wèn)權(quán)限均為公用的9、已知X類(lèi),則當(dāng)程序執(zhí)行到語(yǔ)句:Xarray[3];時(shí),調(diào)用了( )次構(gòu)造函數(shù)。A.0 B.1 C。2 D.310、下面說(shuō)法中,正確的是( )一個(gè)類(lèi)只能定義一個(gè)構(gòu)造函數(shù),但可以定義多個(gè)析構(gòu)函數(shù)一個(gè)類(lèi)只能定義一個(gè)析構(gòu)函數(shù),但可以定義多個(gè)構(gòu)造函數(shù)C。 構(gòu)造函數(shù)與析構(gòu)函數(shù)同名,只要名字前加了一個(gè)求反符號(hào)(~)D。 構(gòu)造函數(shù)可以指定返回類(lèi)型,而析構(gòu)函數(shù)不能指定任何返回類(lèi)型,即使是void類(lèi)型也不可以11、 已知:print()函數(shù)是一個(gè)類(lèi)的常成員函數(shù),它無(wú)返回值,下列表示中,( )是正確的。A.voidprint()const; B.constvoidprint();C。 voidconstprint(); D。voidprint(const);12、下面描述中,表達(dá)錯(cuò)誤的是( )A.公用繼承時(shí)基類(lèi)中的public成員在派生類(lèi)中仍是public的B。公用繼承時(shí)基類(lèi)中的private成員在派生類(lèi)中仍是private的C.公用繼承時(shí)基類(lèi)中的protected成員在派生類(lèi)中仍是protected的D。私有繼承時(shí)基類(lèi)中的public成員在派生類(lèi)中是private的13、設(shè)置虛基類(lèi)的目的是( )。A。 簡(jiǎn)化程序B.消除二義性C.提高運(yùn)行效率D.減少目標(biāo)代碼14、下面( )的敘述不符合賦值兼容規(guī)則.A。 派生類(lèi)的對(duì)象可以賦值給基類(lèi)的對(duì)象B。 基類(lèi)的對(duì)象可以賦值給派生類(lèi)的對(duì)象派生類(lèi)的對(duì)象可以初始化基類(lèi)的對(duì)象派生類(lèi)的對(duì)象的地址可以賦值給指向基類(lèi)的指針15、關(guān)于虛函數(shù)的描述中,( )是正確的。虛函數(shù)是一個(gè)static類(lèi)型的成員函數(shù)虛函數(shù)是一個(gè)非成員函數(shù)基類(lèi)中說(shuō)明了虛函數(shù)后,派生類(lèi)中與其對(duì)應(yīng)的函數(shù)可不必說(shuō)明為虛函數(shù)派生類(lèi)的虛函數(shù)與基類(lèi)的虛函數(shù)具有不同的參數(shù)個(gè)數(shù)和類(lèi)型16、下面關(guān)于友元的描述中,錯(cuò)誤的是( )。A。 友元函數(shù)可以訪問(wèn)該類(lèi)的私有數(shù)據(jù)成員B。 一個(gè)類(lèi)的友元類(lèi)中的成員函數(shù)都是這個(gè)類(lèi)的友元函數(shù)C。 友元可以提高程序的運(yùn)行效率D。 類(lèi)與類(lèi)之間的友元關(guān)系可以繼承17、下列關(guān)于靜態(tài)數(shù)據(jù)成員的說(shuō)法,不正確的是( )。類(lèi)中定義的公用靜態(tài)數(shù)據(jù)成員,可以通過(guò)類(lèi)的對(duì)象來(lái)訪問(wèn)類(lèi)中定義的所有靜態(tài)數(shù)據(jù)成員,都必須在類(lèi)外初始化靜態(tài)數(shù)據(jù)成員不是所有對(duì)象所共用的普通的成員函數(shù)可以直接訪問(wèn)類(lèi)中的靜態(tài)數(shù)據(jù)成員18、如果表達(dá)式++i*k中的“++”和“*”都是重載的友元運(yùn)算符,若采用運(yùn)算符

函數(shù)調(diào)用格式,則表達(dá)式還可以表示為(A函數(shù)調(diào)用格式,則表達(dá)式還可以表示為(A。operator*(i。operator++(),k)C.iooperator++()。operator*(k)19、下面對(duì)模板的聲明,正確的是( )A。template<T〉).operator*(operator++(i),k)D。 k.operator*(operator++(i))B.template<classT1,T2〉C。 template〈classT1,classT2〉 D。 template<classT1;classT2>20、下列的各類(lèi)函數(shù)中,( )不是類(lèi)的成員函數(shù)A。構(gòu)造函數(shù)B。析構(gòu)函數(shù)C。友元函數(shù)D.復(fù)制構(gòu)造函數(shù)二、填空題(前14個(gè)空,每空1分,后3個(gè)空,每空2分,共20分)1、類(lèi)和對(duì)象的關(guān)系可表述為:類(lèi)是對(duì)象的 ,而對(duì)象則是類(lèi)的 。2、靜態(tài)成員函數(shù)沒(méi)有隱含的 ,所以,在C++程序中,靜態(tài)成員函數(shù)主要用來(lái)訪問(wèn)靜態(tài)數(shù)據(jù)成員,而不訪問(wèn)非靜態(tài)成員。3、在圖1中,A,B,C,D,E,F均是類(lèi),其中屬于單繼承的派生類(lèi)有 ,屬于多繼承的派生類(lèi)有 ,類(lèi)F的基類(lèi)有 ,類(lèi)A的派生類(lèi)有 。ABCABC圖1類(lèi)的繼承層次圖4、如果只想保留公共基類(lèi)的一個(gè)復(fù)制,就必須使用關(guān)鍵字 把這個(gè)公共基類(lèi)聲明為虛基類(lèi).TOC\o"1-5"\h\z5、從實(shí)現(xiàn)的角度來(lái)講,多態(tài)性可以劃分為兩類(lèi): 和 .6、如果一個(gè)類(lèi)包含一個(gè)或多個(gè)純虛函數(shù),則該類(lèi)稱(chēng)為 。7、 若要把voidfun()定義為類(lèi)A的友元函數(shù),則應(yīng)在類(lèi)A的定義中加入語(yǔ)句 .8、列出C++中的兩種代碼復(fù)用方式: 和 。9、 析構(gòu)函數(shù)的作用是 10、 假定A是一個(gè)類(lèi)名,則該類(lèi)的拷貝構(gòu)造函數(shù)的原型說(shuō)明語(yǔ)句為: 11、 后置自增運(yùn)算符“++”重載為類(lèi)的成員函數(shù)(設(shè)類(lèi)名為A)的形式為: 三、閱讀下面4個(gè)程序,寫(xiě)出程序運(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(){coutvv"A::A()called。\n";}virtual~A(){cout〈〈"A::?A()calledAn”;}};classB:publicA{public:B(inti){cout<<”B::B()called。\n";buf=newchar[i];}virtual~B(){delete[]buf;cout〈〈”B::?B()called。\n”;}private:char*buf;};intmain(){A*a=newB(15);deletea;return0;}4、#include<iostream〉usingnamespacestd;classA{public:voidf(){cout<<”CallA'sfunctionf()”〈〈endl;}};classB{public:voidf() {coutvv"CallB'sfunctionf()"〈vendl;}voidg(){cout〈〈"CallB'sfunctiong()"〈〈endl;}};classC:publicA,publicB{public:voidg(){cout<<”CallC'sfunctiong()"〈vendl;};intmain(){Ccc;cc.B::f();cc.B::g();CC。g();return0;}四、編程題(27分)1、(10分)已知復(fù)數(shù)類(lèi)Complex的聲明如下:ClassComplex{publiC:Complex(); //無(wú)參構(gòu)造函數(shù)Complex(double); //轉(zhuǎn)換構(gòu)造函數(shù)Complex(double,double); //有兩個(gè)形參的構(gòu)造函數(shù)friendComplexoperator+(Complex&,Complex&); //對(duì)“+”運(yùn)算符進(jìn)行重載friendostream&operatorv〈(ostream&.Complex&); 〃對(duì)“〈<"運(yùn)算符進(jìn)行重載friendistream&operator>>(istream&,Complex&);//對(duì)“>>”運(yùn)算符進(jìn)行重載private:doublereal,imag;};要求:(1)寫(xiě)出該類(lèi)的所有構(gòu)造函數(shù)的類(lèi)外定義代碼。(2)寫(xiě)出對(duì)運(yùn)算符“+”、“<〈”、“〉〉”進(jìn)行重載的運(yùn)算符重載函數(shù)的定義。2、(17分)下列Shape類(lèi)是一個(gè)表示形狀的抽象類(lèi),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類(lèi)派生圓類(lèi)(Circle)、正方形類(lèi)(Square),圓類(lèi)新增數(shù)據(jù)成員半徑(radius),正

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論