《面向對象程序設計C++》期末試卷及標準答案集總(共32頁)_第1頁
《面向對象程序設計C++》期末試卷及標準答案集總(共32頁)_第2頁
《面向對象程序設計C++》期末試卷及標準答案集總(共32頁)_第3頁
《面向對象程序設計C++》期末試卷及標準答案集總(共32頁)_第4頁
《面向對象程序設計C++》期末試卷及標準答案集總(共32頁)_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上面向對象程序設計C+期末考試試卷(B)班級: 姓名: 學號: 分數: 題號一二三四總分得分試卷說明:本套試題共四個大題,全部題目都答在答題紙上,寫在其他地方均無效。(答題紙在本套試卷的第8頁上)一、單項選擇題(每小題2分,共40分)1、關于C+與C語言關系的描述中,( D )是錯誤的。 AC語言是C+語言的一個子集 BC語言與C+語言是兼容的 CC+語言對C語言進行了一些改進 DC+語言和C語言都是面向對象的2、已知:int m=10; 下列表示引用的方法中,( A )是正確的。Aint &x=m; Bint &y=10; Cint &z; Dfloat &t=&m;

2、3、考慮下面的函數原型聲明:void testDefaulParam(int a,int b=7,char z=*);下面函數調用中,不合法的是( C )。AtestDefaulParam(5); BtestDefaulParam(5,8);CtestDefaulParam(5,#); DtestDefaulParam(0,0,*);4、系統在調用重載函數時往往根據一些條件確定哪個重載函數被調用,在下列選項中,不能作為依據的是( A )。A函數的返回值類型 B參數的類型 C函數名稱 D參數個數5、下列有關C+類的說法中,不正確的是( D )。A類是一種用戶自定義的數據類型B只有類中的成員函數或

3、類的友元函數才能存取類中的私有成員C在類中,如果不做特別說明,所有成員的訪問權限均為私有的D在類中,如果不做特別說明,所有成員的訪問權限均為公用的6、已知X類,則當程序執行到語句X array3;時,調用了( D )次構造函數。A0 B1 C2 D37、有關析構函數的說法,不正確的是( B )。A析構函數有且僅有一個B析構函數和構造函數一樣可以有形參C析構函數的功能是在系統釋放對象之前作一些內存清理工作D析構函數無任何函數類型8、類定義的內容允許被其對象無限制地存取的是( C )。Aprivate 部分 B protected 部分 Cpublic 部分 D以上都不對9、關于常數據成員的說法,

4、不正確的是( )。A常數據成員的定義形式與一般常變量的定義形式相同,只不過常數據成員的定義必須出現在類體中B常數據成員必須進行初始化,并且不能被更新C常數據成員通過構造函數的成員初始化列表進行初始化D常數據成員可以在定義時直接初始化10、運用運算符delete刪除一個動態對象時( )。A系統首先為該動態對象調用構造函數,再釋放其占用的內存B系統首先釋放該動態對象占用的內存,再為其調用構造函數C系統首先為該動態對象調用析構函數,再釋放其占用的內存D系統首先釋放動態對象占用的內存,再為其調用析構函數11、可以在類外用p.a的形式訪問派生類對象p的基類成員a,其中a是( D )。A私有繼承的公用成員

5、 B公用繼承的私有成員C公用繼承的保護成員 D公用繼承的公用成員12、在公用繼承方式下,有關派生類對象和基類對象的關系,不正確的敘述是( )。A派生類的對象可以賦給基類的對象B派生類的對象可以初始化基類的引用C派生類的對象可以直接訪問基類中的成員D派生類的對象的地址可以賦給指向基類的指針13、設置虛基類的目的是( B )。A簡化程序 B消除二義性 C提高運行效率 D減少目標代碼14、在C+中,用于實現動態多態性的是( D )。A內聯函數 B重載函數 C模板函數 D虛函數15、不能說明為虛函數的是( )。A析構函數 B構造函數 C類的成員函數 D以上都不對16、如果一個類至少有一個純虛函數,那么

6、就稱該類為( )。A抽象類 B派生類 C純基類 D以上都不對17、下面關于友元的描述中,錯誤的是( )。A友元函數可以訪問該類的私有數據成員B一個類的友元類中的成員函數都是這個類的友元函數C友元可以提高程序的運行效率D類與類之間的友元關系可以繼承18、下列運算符中,( )運算符在C+中不能被重載。A& B C: Dnew19、模板的使用實際上是將類模板實例化成一個( )。A函數 B對象 C類 D抽象類20、假定MyClass為一個類,則該類的拷貝構造函數的聲明語句為( )。AMyClass(MyClass x) BMyClass&(MyClass x)CMyClass(MyClass &x)

7、DMyClass(MyClass *x)二、填空題(前16個空,每空1分,后2個空,每空2分,共20分)1、類和對象的關系可表述為:類是對象的 ,而對象則是類的 。2、在C+中,三種繼承方式的說明符號為 、 和 ,如果不加說明,則默認的繼承方式為 。3、如果只想保留公共基類的一個復制,就必須使用關鍵字 把這個公共基類聲明為虛基類。4、若要把void fun()定義為類A的友元函數,則應在類A的定義中加入語句 。5、類的靜態成員分為 和 。6、運算符重載要求保持其原來的操作數個數、 、 和語法結構。7、通過關鍵字 可以聲明模板,通過關鍵字 指定函數模板的類型參數,有幾個類型參數就有幾個類型關鍵字

8、。8、列出C+中兩種用戶自定義的數據類型: 、 。9、構造函數的作用是 。10、后置自增運算符“+”重載為類的成員函數(設類名為A)的形式為 。三、閱讀下面3個程序,寫出程序運行時輸出的結果:(共13分)1、#includeusing namespace std;void fun(int &a,int &b) int p; p=a; a=b; b=p;void exchange(int &a,int &b,int &c) if(ab)fun(a,b); if(ac)fun(a,c); if(bc)fun(b,c);int main() int a=12,b=89,c=56; exchange(

9、a,b,c); couta=a,b=b,c=cendl; return 0;2、#include using namespace std;class Date public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month, day, year; ; Date:Date(int m,int d,int y):month(m),day(d),year(y) Date:Date(int m,int d):month(m),day(d) year=2009; Date:Da

10、te(int m):month(m)day=1; year=2010; Date:Date() month=1; day=1; year=2010; void Date:display()coutmonth/day/yearendl; int main() Date d1(12,31,2009); Date d2(12,31); Date d3(1); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; 3、#include using namespace std;class A public:

11、A()coutconstructing A endl; A()coutdestructing A endl;class B: public A public: B()coutconstructing B endl; B()coutdestructing B endl;class C : public B public: C()coutconstructing C endl; C()coutdestructing C endl;int main() C c1; return 0;四、編程題(共27分)1、(10分) 已知復數類Complex的聲明如下:class Complexpublic: C

12、omplex(); /無參構造函數 Complex(double ); /轉換構造函數Complex(double, double);/有兩個形參的構造函數 friend Complex operator+(Complex&, Complex&); /對“+”運算符進行重載 friend ostream& operator(ostream&, Complex&); /對“(istream&, Complex&); /對“”運算符進行重載private: double real,imag;要求:(1)寫出該類的所有構造函數的類外定義代碼。 (2)寫出對運算符“+”、“”進行重載的運算符重載函數的

13、定義。2、(17分)下列Shape類是一個表示形狀的抽象類,area( )為求圖形面積的函數,total( )則是一個通用的用以求不同形狀的圖形面積總和的函數。class Shapepublic:virtual double area()=0;double total(Shape *s , int n) double sum=0.0; for(int i=0; iarea( );return sum; 要求:(1)從Shape類派生圓類(Circle)、正方形類(Square),圓類新增數據成員半徑(radius),正方形類新增數據成員邊長(a),圓類和正方形類都有構造函數,修改、顯示數據成員

14、值的函數,求面積函數。 (2)寫出main()函數,計算半徑為5.5的圓和邊長為9.9的正方形的面積和(必須通過調用total函數計算)。面向對象程序設計C+期末考試試卷(B)標準答案班級: 姓名: 學號: 分數: 題號一二三四總分得分一、單項選擇題(每小題2分,共40分)1-5D A C A D 6-10D B C D C 11-15D C B D B 16-20A D C C C二、填空題(前16個空,每空1分,后2個空,每空2分,共20分)1 抽象 、 實例 2 public 、 private _ _、 protected 、 private _ _3 virtual _ 4 frie

15、nd void fun(A &a) _5 靜態數據成員 、 靜態成員函數 6 結合性 、 優先級_ _7 Template 、 class(或typename) 8 類 、 結構體 _9 在創建對象時初始化對象的數據成員 _10 A operator+(int) _三、閱讀程序(共13分)1、a=89,b=56,c=122、12/31/2009 12/31/2009 1/1/2010 1/1/20103、constructing Aconstructing Bconstructing Cdestructing Cdestructing Bdestructing A四、編程題(共27分)1、(1

16、0分)Complex:Complex()real=0;imag=0;Complex:Complex(double r)real=r;Complex:Complex(double r,double i)real=r;imag=i;Complex operator+(Complex &c1,Complex &c2) Complex c; c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag; return c;ostream& operator (ostream& output,Complex& c) output(c.real+c.imagi) (istr

17、eam& input,Complex& c) coutc.realc.imag; return input;2、(17分)class Circle:public Shapepublic: Circle(double r)radius=r; void set() coutPlease input the value of the circle:radius; void show() coutthe radius of the circle=radiusa=a; void set() coutPlease input the value of a:a; void show() couta=aend

18、l; double area()return a*a;private: double a;int main()Circle C(5.5);C.show();Square S(9.9);S.show();Shape *s=&C,&S;couttotal=total(s,2)endl;return 0;面向對象程序設計C+期末考試試卷 一、選擇題(每小題3分,共48分。)01、下列關于C+函數的敘述中,正確的是( C )。 A)每個函數至少要具有一個參數 B)每個函數都必須返回一個值 C)函數在被調用之前必須先聲明 D)函數不能自己調用自己02、下列關于類和對象的敘述中,錯誤的是( A )。 A)

19、一個類只能有一個對象 B)對象是類的具體實例 C)類是對某一類對象的抽象 D)類和對象的關系是一種數據類型與變量的關系03、在C+中,用于實現運行時多態性的是(D )。 A)內聯函數 B)重載函數 C)模板函數 D)虛函數04、下列關于運算符重載的敘述中,正確的是(B )。 A)通過運算符重載,可以定義新的運算符 B)有的運算符只能作為成員函數重載 C)若重載運算符+,則相應的運算符函數名是+ D)重載二元運算符時,必須聲明兩個形參05、對于語句 coutxendl;錯誤的是描述是(D )。 A)“cout”是一個輸出流對象 B)“endl”的作用是輸出回車換行 C)“x”是一個變量 D)“”

20、稱作提取運算符06、有如下類聲明,則類MyDERIVED中保護的數據成員和成員函數的個數是( )。 class MyBASE private: int k; public: void set(int n) k=n; int get( )const return k; ; class MyDERIVED: protected MyBASE protected: int j; public: void set(int m, int n) MyBASE:set(m); j=n; int get( ) const return MyBASE:get( )+j; ;A)4 B)3 C)2 D)107、已

21、知在一個類體中包含如下函數原型: Volume operator-(Volume)const;,下列關于這個函數的敘述中,錯誤的是( B )。 A)這是運算符-的重載運算符函數 B)這個函數所重載的運算符是一個一元運算符 C)這是一個成員函數 D)這個函數不改變類的任何數據成員的值08、執行如下的程序段后,輸出結果是( C )。 cout.fill(*); cout.width(6); cout.fill(#); cout 123 endl; A)#123 B)123# C)*123 D)123*09、在下列函數原型中,可以作為類AA構造函數的是(B )。 A)void AA(int); B)

22、int AA(); C)AA(int)const; D)AA(int);10、下面四個選項中,( A)是用來聲明虛函數的。 A)virtual B)public C)include D)using namespace11、實現運行時的多態性要使用( D )。 A)重載函數 B)構造函數 C)析構函數 D)虛函數12、要實現動態聯編,必須通過( )調用虛函數。 A)對象指針 B)成員名限定 C)對象名 D)派生類名13、以下( C )成員函數表示純虛函數。 A)virtual int vf(int); B)void vf(int)=0; C)virtual void vf()=0; D)virt

23、ual void vf(int)14、有如下類聲明:class XA private: int x; public: XA(int n) x=n; ; class XB: public XA private: int y; public: XB(int a,int b); ; 在構造函數XB的下列定義中,正確的是( )。 A)XB:XB(int a,int b): x(a),y(b) B)XB:XB(int a,int b): XA(a),y(b) C)XB:XB(int a,int b): x(a),XB(b) D)XB:XB(int a,int b): XA(a),XB(b) 15、在表達

24、式 x+y*z中, + 是作為成員函數重載的運算符,* 是作為非成員函數重載的運算符。則 operator+ 有 個參數,operator* 有 參數。( ) A)2、2 B)2、1 C)1、2 D)1、116、應在下列程序劃線處填入的正確語句是( )。 class Base public: void fun()coutBase:funendl; ;class Derived:public Base void fun() /顯示調用基類的函數fun() coutDerived:funfun();二、填空題(每空2分,共20分。)17、繼承、多態性18、友元19、私有20、private或私有2

25、1、成員、友元22、width/setw23、抽象類17、面向對象程序設計有四個主要特點,即抽象、封裝、_多態性_和_繼承性_。18、非成員函數應聲明為類的_友元_函數才能訪問這個類的private成員。19、派生類中的成員不能直接訪問基類中的_私有、成員。20、在用class定義一個類時,數據成員和成員函數的默認訪問權限是私有。21、運算符重載函數可能是類的_友元_函數,也可以是類的_成員_函數,還可以是普通函數。22、用流對象的成員函數控制輸出格式時,用于設置字段寬度的流成員函數的名稱是_width_,與之作用相同的控制符名稱是_setw_。23、含有純虛函數的類稱為_抽象類。三、程序的填

26、空、程序的執行(每題4分,共20分。)24、以下程序是定義一個計數器類counter,對其重載運算符“+”,請填空。class counter private: int n; public: counter() n=0; counter(int i)n=i; _ /運算符重載函數 counter t; t.n=n+c.n; return t; void disp() coutn=nendl;void main() counter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp(); 25、下列程序的輸出結果為2,請將程序補充完整

27、。class Base public: _ void fun() cout1; ;class Derived: public Base public: void fun( ) coutfun( ); delete p; return 0; 26、寫出執行下面程序的輸出結果。void fun(int &x, int y) int t=x; x=y; y=t; int main( ) int a2 = 23, 42; fun(a1,a0); std:couta0,a1std:endl; return 0; 27、寫出執行下面程序的輸出結果。class A public: A() coutA; ;c

28、lass B public: B() coutB; ;class C : public A B b; public: C() coutC; ;int main( ) C obj; return 0; 28、寫出執行下面程序的輸出結果。class Base private: char c; public: Base(char n):c(n) virtual Base()coutC; ; class Der:public Base private: char c; public: Der(char n):Base(n+1),c(n) Der()coutC; ; int main() Der(X);

29、 return 0; 四、編程題(12分)29、編寫一個程序計算“三角形、正方形、圓形”三種圖形的面積,要求:a)抽象出一個基類base;b)在其中說明一個虛函數用來求面積;c)利用派生類定義“三角形、正方形、圓形”;d)編寫主函數并測試。參考答案一、選擇題(每小題3分,共48分。)01-05 C A D B D06-10 B B A D A11-16 D A C B C C三、程序的填空、程序的執行(每題4分,共20分。)24、counter operator + (counter c)25、virtual26、23,2327、ABC28、XY四、編程題(12分)29、#include us

30、ing namespace std;class base public: virtual float area() const return 0; ;class triangle: public base protected: float bian,height; public: triangle(float a=0, float h=0) bian=a; height=h; virtual float area() const return bian*height/2; ;class square: public base protected: float bian; public: squ

31、are(float a=0) bian=a; virtual float area() const return bian*bian; ;class circle: public base protected: float radius; public: circle(float r=0) radius=r; virtual float area() const return 3.14*radius*radius; ;int main() triangle t(3,4); square s(5); circle c(2); base *p; p=&t; couttriangles area:a

32、rea()endl; p=&s; coutsquares area:area()endl; p=&c; coutcircles area:area()str; 執行時,從鍵盤輸入:Microsoft Visual Studio 6.0!所得的結果是str=( )。A. Microsoft Visual Studio 6.0! B. MicrosoftC. Microsoft Visual D. Microsoft Visual Studio 6.04、考慮下面的函數原型聲明:void testDefaulParam(int a,int b=7,char z=*);下面函數調用中,不合法的是(

33、)。A. testDefaulParam(5); B. testDefaulParam(5,8);C. testDefaulParam(5,#); D. testDefaulParam(0,0,*);5、下列語句中,將函數int sum(int x, int y)正確重載的是( )。A. float sum(int x, int y); B. int sum(int a, int b);C. float sum(float x, float y); D. double sum(int y, int x);6、下列表示引用的方法中,( )是正確的。已知:int a=1000;A. int &x=

34、a; B. char &y; C. int &z=1000; D. float &t=&a;7、在一個函數中,要求通過函數來實現一種不太復雜的功能,并且要求加快執行速度,選用( )。A. 內聯函數 B. 重載函數 C. 遞歸調用 D. 嵌套調用8、下列有關C+類的說法中,不正確的是( )。A. 類是一種用戶自定義的數據類型B. 只有類中的成員函數或類的友元函數才能存取類中的私有成員C. 在類中,如果不做特別說明,所有成員的訪問權限均為私有的D. 在類中,如果不做特別說明,所有成員的訪問權限均為公用的9、已知X類,則當程序執行到語句:X array3;時,調用了( )次構造函數。A. 0 B.

35、1 C. 2 D. 310、下面說法中,正確的是( )A. 一個類只能定義一個構造函數,但可以定義多個析構函數B. 一個類只能定義一個析構函數,但可以定義多個構造函數C. 構造函數與析構函數同名,只要名字前加了一個求反符號()D. 構造函數可以指定返回類型,而析構函數不能指定任何返回類型,即使是void類型也不可以11、已知:print( )函數是一個類的常成員函數,它無返回值,下列表示中,( )是正確的。 A. void print( ) const; B. const void print( ); C. void const print( ); D. void print(const);1

36、2、下面描述中,表達錯誤的是( ) A. 公用繼承時基類中的public成員在派生類中仍是public的B. 公用繼承時基類中的private成員在派生類中仍是private的C. 公用繼承時基類中的protected成員在派生類中仍是protected的D. 私有繼承時基類中的public成員在派生類中是private的13、設置虛基類的目的是( )。A. 簡化程序 B. 消除二義性 C. 提高運行效率 D. 減少目標代碼14、下面( )的敘述不符合賦值兼容規則。A. 派生類的對象可以賦值給基類的對象B. 基類的對象可以賦值給派生類的對象C. 派生類的對象可以初始化基類的對象D. 派生類的對

37、象的地址可以賦值給指向基類的指針15、關于虛函數的描述中,( )是正確的。 A. 虛函數是一個static類型的成員函數 B. 虛函數是一個非成員函數 C. 基類中說明了虛函數后,派生類中與其對應的函數可不必說明為虛函數 D. 派生類的虛函數與基類的虛函數具有不同的參數個數和類型16、下面關于友元的描述中,錯誤的是( )。A. 友元函數可以訪問該類的私有數據成員B. 一個類的友元類中的成員函數都是這個類的友元函數C. 友元可以提高程序的運行效率D. 類與類之間的友元關系可以繼承17、下列關于靜態數據成員的說法,不正確的是( )。A. 類中定義的公用靜態數據成員,可以通過類的對象來訪問B. 類中

38、定義的所有靜態數據成員,都必須在類外初始化C. 靜態數據成員不是所有對象所共用的D. 普通的成員函數可以直接訪問類中的靜態數據成員18、如果表達式+i*k中的“+”和“*”都是重載的友元運算符,若采用運算符函數調用格式,則表達式還可以表示為( )。A. operator*(i.operator+(),k) B. operator*(operator+(i),k)C. i.operator+().operator*(k) D. k.operator*(operator+(i)19、下面對模板的聲明,正確的是( )。A. template B. templateC. template D. tem

39、plate20、下列的各類函數中,( )不是類的成員函數A. 構造函數 B. 析構函數 C. 友元函數 D. 復制構造函數二、填空題(前14個空,每空1分,后3個空,每空2分,共20分)1、類和對象的關系可表述為:類是對象的 ,而對象則是類的 。2、靜態成員函數沒有隱含的 ,所以,在C+程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。3、在圖1中,A,B,C,D,E,F均是類,其中屬于單繼承的派生類有 ,屬于多繼承的派生類有 ,類F的基類有 ,類A的派生類有 。ABCDEF圖1 類的繼承層次圖4、如果只想保留公共基類的一個復制,就必須使用關鍵字 把這個公共基類聲明為虛基類。5

40、、從實現的角度來講,多態性可以劃分為兩類: 和 。6、如果一個類包含一個或多個純虛函數,則該類稱為 。7、若要把void fun()定義為類A的友元函數,則應在類A的定義中加入語句 。8、列出C+中的兩種代碼復用方式: 和 。9、析構函數的作用是 。10、假定A是一個類名,則該類的拷貝構造函數的原型說明語句為: 。11、后置自增運算符“+”重載為類的成員函數(設類名為A)的形式為: 。三、閱讀下面4個程序,寫出程序運行時輸出的結果。(共13分)1、#includeusing namespace std;void fun(int &a, int &b) int p; p=a; a=b; b=p;

41、void exchange(int &a, int &b, int &c) if( ab ) fun(a, b); if( ac ) fun(a, c); if( bc ) fun(b, c);int main() int a=12,b=89,c=56; exchange(a, b, c); couta=a,b=b,c=cendl; return 0;2、#include using namespace std;class A public: A( ) cout A; ;class B public:B( ) cout B; ;class C: public A public: C( ) cout C; private: B b;int main ( ) C obj; return 0; 3、#include using namespace std;class Apublic:A()coutA:A() called.n;virtual A()coutA:A() called.n; class B: public Apublic:B(int i) coutB:B() called.n;buf=new chari;virtual B() delete buf; coutB:B() called.n;private:char *buf;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論