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

下載本文檔

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

文檔簡介

1、面向對象程序設計 C+期末考試試卷(A)班級:姓名:學號:分數:題號一二三四總分得分試卷說明:本套試題共四個大題,全部題目都答在答題紙上,寫在其他地方均無效。(答題紙在本套試卷的第10頁上)一、選擇題(每小題2分,共40分)1、C+是()。A.面向對象的程序設計語言B.面向過程的程序設計語言C.既支持面向對象的程序設計又支持面向過程的程序設計的混合型語言D.非結構化的程序設計語言2、面向對象程序設計思想的主要特征中不包括()。A.封裝性 B.多態(tài)性 C.繼承性 D.功能分解,逐步求精3、若定義:string str;當語句cin>>str;執(zhí)行時,從鍵盤輸入:Microsoft V

2、isual Studio 6.0!所得的2果是str=()。A. Microsoft Visual Studio 6.0! B. MicrosoftC. Microsoft VisualD. Microsoft Visual Studio 6.04、考慮下面的函數原型聲明:void testDefaulParam(int a,int b=7,char z='*');下面函數調用中,不合法的是()。A. testDefaulParam(5);B. testDefaulParam(5,8);C. testDefaulParam(5,'#');D. testDefau

3、lParam(0,0,'*');5、下列語句中,將函數int sum(int x, int y)正確重載的是()。A. float sum(int x, int y);B. int sum(int a, int b);D. double sum(int y, int x);C. float sum(float x, float y);6、下列表示引用的方法中, ( )是正確的。已知: int a=1000;A. int &x=a; B. char &y; C. int &z=1000; D. float &t=&a;7、在一個函數中,要求

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

5、只能定義一個析構函數,但可以定義多個構造函數C. 構造函數與析構函數同名,只要名字前加了一個求反符號( )D. 構造函數可以指定返回類型, 而析構函數不能指定任何返回類型, 即使是 void 類型也不可以11、已知: print( ) 函數是一個類的常成員函數,它無返回值,下列表示中,()是正確的。A. void print( ) const;B. const void print( );C. void const print( );D. void print(const);12、下面描述中,表達錯誤的是()A. 公用繼承時基類中的 public 成員在派生類中仍是public 的B. 公用繼

6、承時基類中的 private 成員在派生類中仍是 private 的C.公用繼承時基類中的protected成員在派生類中仍是protected的D.私有繼承時基類中的public成員在派生類中是private的13、設置虛基類的目的是() 。A. 簡化程序B. 消除二義性C. 提高運行效率D. 減少目標代碼14、下面()的敘述不符合賦值兼容規(guī)則。A. 派生類的對象可以賦值給基類的對象B. 基類的對象可以賦值給派生類的對象C. 派生類的對象可以初始化基類的對象D. 派生類的對象的地址可以賦值給指向基類的指針15、關于虛函數的描述中,( )是正確的。A.虛函數是一個static類型的成員函數B.

7、 虛函數是一個非成員函數C. 基類中說明了虛函數后,派生類中與其對應的函數可不必說明為虛函數D. 派生類的虛函數與基類的虛函數具有不同的參數個數和類型16、下面關于友元的描述中,錯誤的是() 。A. 友元函數可以訪問該類的私有數據成員B. 一個類的友元類中的成員函數都是這個類的友元函數C. 友元可以提高程序的運行效率D. 類與類之間的友元關系可以繼承17、下列關于靜態(tài)數據成員的說法,不正確的是() 。A. 類中定義的公用靜態(tài)數據成員,可以通過類的對象來訪問B. 類中定義的所有靜態(tài)數據成員,都必須在類外初始化C. 靜態(tài)數據成員不是所有對象所共用的D. 普通的成員函數可以直接訪問類中的靜態(tài)數據成員

8、18、如果表達式+i*k 中的“ + ”和“ * ”都是重載的友元運算符,若采用運算符函數調用格式,則表達式還可以表示為( ) 。A. operator*(i.operator+(),k)B. operator*(operator+(i),k)C. i.operator+().operator*(k)19、下面對模板的聲明,正確的是(A. template<T>C. template<class T1, class T2>20、下列的各類函數中,()A.構造函數 B.析構函數D. k.operator*(operator+(i)。B. template<class

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

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

11、 &b) int p;p=a; a=b; b=p;void exchange(int &a, int &b, int &c) if( a<b ) fun(a, b);if( a<c ) fun(a, c);if( b<c ) fun(b, c);int main() int a=12,b=89,c=56;exchange(a, b, c);cout<<"a="<<a<<",b="<<b<<",c="<<c<&

12、lt;endl;return 0;2、#include <iostream>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 <iostream>using namespac

13、e std;class Apublic:A()cout<<"A:A() called.n"virtual A()cout<<"A:A() called.n"class B: public A public:B(int i) cout<<"B:B() called.n"buf=new chari;virtual B() delete buf;cout<<"B:B() called.n"private:char *buf;int main() A *a=new B(15)

14、;delete a;return 0;4、#include <iostream>using namespace std;class Apublic:void f()cout<<"Call A's function f()"<<endl;class Bpublic:void f() cout<<"Call B's function f()"<<endl;void g() cout<<"Call B's function g()"<<

15、;endl; ;class C: public A, public Bpublic:void g()cout<<"Call C's function g()"<<endl;int main() C cc;cc.B:f();cc.B:g();cc.g();return 0;四、編程題( 27 分)1、 ( 10分)已知復數類Complex 的聲明如下:class Complexpublic:Complex();/ 無參構造函數Complex(double );/轉換構造函數Complex(double, double);/有兩個形參的構造函數f

16、riend Complex operator+(Complex&, Complex&); /對“ + ”運算符進行重載friend ostream& operator<<(ostream&, Complex&); /對“ << ” 運算符進行重載friend istream& operator>>(istream&, Complex&);/對“ >> ”運算符進行重載private:double real,imag;要求: ( 1)寫出該類的所有構造函數的類外定義代碼。( 2)寫出對

17、運算符“+ ” 、 “ << ” 、 “ >> ”進行重載的運算符重載函數的定義。2、( 17分)下列Shap啖是一個表示形狀的抽象類,area()為求圖形面積的函數,total() 則是一個通用的用以求不同形狀的圖形面積總和的函數。class Shapepublic:virtual double area()=0;double total(Shape *s , int n) double sum=0.0;for(int i=0; i<n; i+) sum+=si->area( );return sum;要求:(1)從Shape類派生圓類(Circle)、正

18、方形類(Squar,圓類新增數據成員半徑( radius) ,正方形類新增數據成員邊長(a) ,圓類和正方形類都有構造函數,修改、顯示數據成員值的函數,求面積函數。(2)寫出main()函數,計算半徑為5.5的圓和邊長為9.9的正方形的面積和(必須通過調用 total 函數計算) 。25 / 24面向對象程序設計 C+期末考試試卷(A)標準答案班級:姓名:學號:分數:題號一二三四總分得分、單項選擇題(每小題2分,共40分)1-5. C D B C C6-10. A A D D B11-15. A B B B C16-20. D C B C C二、填空題(前14個空,每空1分,后3個空,每空2分

19、,共20分)1. 抽象實例 2. this 指針3. ED 、F A 、B、C、D E D 、F4. virtual5. 靜態(tài)多態(tài)性 動態(tài)多態(tài)性6. 抽象類7. friend void fun(A &a)8. 繼承組合或模板9. 在對象被系統(tǒng)釋放之前做一些內存清理工作10. A(const A&)11. A operator+(int)三、閱讀程序(13分)1、a=89,b=56,c=122、ABC3、A:A() called.B:B() called.B:B() called.A:A() called.4、 Call B's function f()Call B

20、9;s function g()Call C's function g()四、編程題(共27分)1、 ( 10分)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&

21、; operator << (ostream& output,Complex& c) output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;return output;istream& operator >> (istream& input,Complex& c) cout<<"input real and imaginary part of

22、complex number:"input>>c.real>>c.imag;return input;2、 ( 17分)class Circle:public Shapepublic:Circle(double r)radius=r;void set() cout<<"Please input the value of the circle:"<<endl;cin>>radius;void show() cout<<"the radius of the circle="&l

23、t;<radius<<endl; double area() return 3.14159*radius*radius;private:double radius;class Square:public Shapepublic:Square(double a)this->a=a;void set() cout<<"Please input the value of a:"<<endl;cin>>a;void show() cout<<"a="<<a<<endl

24、; 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;cout<<"total="<<total(s,2)<<endl;return 0;面向對象程序設計 C+期末考試試卷(B)班級:姓名:學號:分數:一、單項選擇題(每小題2分,共40分)1、關于C+與C語言關系的描述中,(A. C語言是C+語言的一個子集C. C+語言對C語言進行了一些改進)是錯誤的

25、。B. C語言與C+語言是兼容的D. C+語言和C語言都是面向對象的題號一二三四總分得分試卷說明:本套試題共四個大題,全部題目都答在答題紙上,寫在其他地方均無效。(答題紙在本套試卷的第8頁上)2、已知:int m=10;下列表示引用的方法中,()是正確的。A. int &x=m; B. int &y=10; C. int &z; D. float &t=&m;3、考慮下面的函數原型聲明:void testDefaulParam(int a,int b=7,char z='*');下面函數調用中,不合法的是() 。A testDefaulP

26、aram(5);B testDefaulParam(5,8);CtestDefaulParam(5,'#');D testDefaulParam(0,0,'*');4、系統(tǒng)在調用重載函數時往往根據一些條件確定哪個重載函數被調用,在下列選項中,不能作為依據的是( ) 。A.函數的返回值類型 B.參數的類型 C.函數名稱D.參數個數5、下列有關C+類的說法中,不正確的是()。A 類是一種用戶自定義的數據類型B 只有類中的成員函數或類的友元函數才能存取類中的私有成員C.在類中,如果不做特別說明,所有成員的訪問權限均為私有的D 在類中,如果不做特別說明,所有成員的訪問權

27、限均為公用的6、已知X類,則當程序執(zhí)行到語句X array3;時,調用了()次構造函數。A 0B 1C 2D 37、有關析構函數的說法,不正確的是() 。A.析構函數有且僅有一個B 析構函數和構造函數一樣可以有形參C.析構函數的功能是在系統(tǒng)釋放對象之前作一些內存清理工作D 析構函數無任何函數類型8、類定義的內容允許被其對象無限制地存取的是( ) 。A private 部分 B protected 部分 C public 部分D 以上都不對9、關于常數據成員的說法,不正確的是() 。A 常數據成員的定義形式與一般常變量的定義形式相同,只不過常數據成員的定義必須出現在類體中B 常數據成員必須進行初

28、始化,并且不能被更新C.常數據成員通過構造函數的成員初始化列表進行初始化D 常數據成員可以在定義時直接初始化10、運用運算符delet刪除一個動態(tài)對象時()。A 系統(tǒng)首先為該動態(tài)對象調用構造函數,再釋放其占用的內存B 系統(tǒng)首先釋放該動態(tài)對象占用的內存,再為其調用構造函數C.系統(tǒng)首先為該動態(tài)對象調用析構函數,再釋放其占用的內存D 系統(tǒng)首先釋放動態(tài)對象占用的內存,再為其調用析構函數11、可以在類外用p.m勺形式訪問派生類對象p的基類成員a,其中81是()A 私有繼承的公用成員B 公用繼承的私有成員C.公用繼承的保護成員D.公用繼承的公用成員12、 在公用繼承方式下,有關派生類對象和基類對象的關系,

29、 不正確的敘述是()A 派生類的對象可以賦給基類的對象B 派生類的對象可以初始化基類的引用C.派生類的對象可以直接訪問基類中的成員D 派生類的對象的地址可以賦給指向基類的指針13、設置虛基類的目的是() 。A.簡化程序B.消除二義性C.提高運行效率D.減少目標代碼14、在C+ 中,用于實現動態(tài)多態(tài)性的是() 。A.內聯函數B.重載函數C.模板函數D.虛函數15、不能說明為虛函數的是()C.類的成員函數D 以上都不對A 析構函數B 構造函數16、如果一個類至少有一個純虛函數,那么就稱該類為()A.抽象類 B.派生類C.純基類D.以上都不對17、下面關于友元的描述中,錯誤的是()A 友元函數可以訪

30、問該類的私有數據成員B 一個類的友元類中的成員函數都是這個類的友元函數C.友元可以提高程序的運行效率D 類與類之間的友元關系可以繼承18、下列運算符中,( )運算符在C+ 中不能被重載。A &&B C :D new19、模板的使用實際上是將類模板實例化成一個()。A .函數B .對象C .類D.抽象類20、假定MyClass為一個類,則該類的拷貝構造函數的聲明語句為()。A . MyClass(MyClass x)B . MyClass&(MyClass x)C. MyClass(MyClass &x)D. MyClass(MyClass *x)二、填空題(前1

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

32、函數的作用是 。10、后置自增運算符“+”重載為類的成員函數(設類名為A)的形式為。三、閱讀下面3個程序,寫出程序運行時輸出的結果:(共13分)1、#include<iostream >using 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(a<b)fun(a,b);if(a<c)fun(a,c);if(b<c)fun(b,c);int main() int a=12,b=89

33、,c=56;exchange(a,b,c);cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;return 0;2、 #include <iostream>using namespace std;class Datepublic:Date(int,int,int);Date(int,int);Date(int);Date();void display();private:int month, day, year

34、;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:Date(int m):month(m)day=1; year=2010; Date:Date() month=1; day=1; year=2010; void Date:display()cout<<month<<"/"<<day<<"/"<<year<<endl;

35、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 <iostream>using namespace std;class A public:A()cout<<"constructing A "<<endl;A()cout<<"destructing A "<<endl;cl

36、ass B: public A public:B()cout<<"constructing B "<<endl;B()cout<<"destructing B "<<endl;class C : public B public:C()cout<<"constructing C "<<endl;C()cout<<"destructing C "<<endl;int main() C c1;return 0;四、編程題(共2

37、7分)1、 ( 10分)已知復數類Complex 的聲明如下:class Complexpublic:Complex();/ 無參構造函數Complex(double );/轉換構造函數Complex(double, double);/W兩個形參的構造函數friend Complex operator+(Complex&, Complex&); /對“ + ”運算符進行重載friend ostream& operator<<(ostream&, Complex&); /對“ << ” 運算符進行重載friend istream&a

38、mp; operator>>(istream&, Complex&);/對“ >>” 運算符進行重載private:double real,imag;要求: ( 1)寫出該類的所有構造函數的類外定義代碼。( 2)寫出對運算符“+ ” 、 “ << ” 、 “ >> ”進行重載的運算符重載函數的定義。2、( 17分)下列Shap啖是一個表示形狀的抽象類,area()為求圖形面積的函數,total() 則是一個通用的用以求不同形狀的圖形面積總和的函數。class Shapepublic:virtual double area()=0;

39、double total(Shape *s , int n) double sum=0.0;for(int i=0; i<n; i+) sum+=si->area( );return sum;要求:(1)從Shape類派生圓類(Circle)、正方形類(Squar,圓類新增數據成員半徑( radius) ,正方形類新增數據成員邊長(a) ,圓類和正方形類都有構造函數,修改、顯示數據成員值的函數,求面積函數。( 2)寫出main() 函數,計算半徑為5.5的圓和邊長為9.9的正方形的面積和(必須通過調用total函數計算)。面向對象程序設計 C+期末考試試卷(B)標準答案班級:姓名:

40、學號:分數:題號一二三四總分得分、單項選擇題(每小題2分,共40分)1-5. D A C A D6-10. D B C D C11-15. D C B D B16-20. A D C C C二、填空題(前16個空,每空1分,后2個空,每空2分,共20分)1. 2. public、 private 、 protected 、 private 3. virtual 4.friend void fun(A &a)5.靜態(tài)數據成員、 靜態(tài)成員函數 6. 結合性 、優(yōu)先級_7. Template 、class( 或 typename) 8. H、 結構體 9. 在創(chuàng)建對象時初始化對象的數據成員10. A operator+(int) 三、閱讀程序(共13分)1、a=89,b=56,c=122、12/31/200912/31/20091/1/20101/1/20103、 constructing Aconstructing Bconstructing Cdestructing Cdestructing Bdestructing A四

溫馨提示

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

最新文檔

評論

0/150

提交評論