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

下載本文檔

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

文檔簡介

《面向對象程序設計C++》期末考試試卷(A)班級:姓名:學號:分數:題號一二二四總分得分試卷說明:本套試題共四個大題,全部題目都答在答題紙上,寫在其他地方均無效。(答題紙在本套試卷的第10頁上)一、選擇題(每小題2分,共40分)1、C+隹(C)。A.面向對象的程序設計語言B.面向過程的程序設計語言C.既支持面向對象的程序設計又支持面向過程的程序設計的混合型語言D.非結構化的程序設計語言2、面向對象程序設計思想的主要特征中不包括(D)。A.封裝性B.多態性C.繼承性D.功能分解,逐步求精3、若定義:stringstr;當語句cin>>str; 執行時,從鍵盤輸入:MicrosoftVisualStudio!所得的2果是str=(B)0A.MicrosoftVisualStudio!B.MicrosoftC.MicrosoftVisual D.MicrosoftVisualStudio4、考慮下面的函數原型聲明:voidtestDefaulParam(inta,intb=7,charz='*');下面函數調用中,不合法的是(C)。A.testDefaulParam(5);B.testDefaulParam(5,8);C.testDefaulParam(5,'#');D.testDefaulParam(0,0,'*');正確重載的是(C5、下列語句中,將函數 正確重載的是(CA.floatsum(intx,inty);B.intsum(inta,intb);C.floatsum(floatx,floaty);D.doublesum(inty,intx);6、下列表示引用的方法中, (A)是正確的。已知:inta=1000;A.int&x=a;B.char&y;C.int&z=1000;D.float&t=&a;7、在一個函數中,要求通過函數來實現一種不太復雜的功能,并且要求加快執行速度,選用(A)。A.內聯函數 B.重載函數 C.遞歸調用D.嵌套調用8、下列有關C+談的說法中,不正確的是(D)。類是一種用戶自定義的數據類型只有類中的成員函數或類的友元函數才能存取類中的私有成員在類中,如果不做特別說明,所有成員的訪問權限均為私有的在類中,如果不做特別說明,所有成員的訪問權限均為公用的9、已知X類,則當程序執行到語句:Xarray[3];時,調用了(D)次構造函數。A.0B.1C.2D.310、下面說法中,正確的是( B)一個類只能定義一個構造函數,但可以定義多個析構函數一個類只能定義一個析構函數,但可以定義多個構造函數構造函數與析構函數同名,只要名字前加了一個求反符號( ~)構造函數可以指定返回類型,而析構函數不能指定任何返回類型,即使是void類型也不可以11、已知:print()函數是一個類的常成員函數,它無返回值,下列表示中,(A)是正確的。

voidprint()voidprint()const;constvoidprint();C.voidconstprint();D.voidprint(const);12、下面描述中,表達錯誤的是(B)公用繼承時基類中的public成員在派生類中仍是 public的公用繼承時基類中的private成員在派生類中仍是 private的公用繼承時基類中的protected成員在派生類中仍是 protected的私有繼承時基類中的public成員在派生類中是 private的13、設置虛基類的目的是(B)。A.簡化程序B.消除二義性 C.提高運行效率 D.減少目標代碼14、下面(B)的敘述不符合賦值兼容規則。派生類的對象可以賦值給基類的對象基類的對象可以賦值給派生類的對象派生類的對象可以初始化基類的對象派生類的對象的地址可以賦值給指向基類的指針15、關于虛函數的描述中, (C)是正確的。虛函數是一個 static類型的成員函數虛函數是一個非成員函數基類中說明了虛函數后,派生類中與其對應的函數可不必說明為虛函數派生類的虛函數與基類的虛函數具有不同的參數個數和類型16、下面關于友元的描述中,錯誤的是( D)。友元函數可以訪問該類的私有數據成員一個類的友元類中的成員函數都是這個類的友元函數友元可以提高程序的運行效率類與類之間的友元關系可以繼承17、下列關于靜態數據成員的說法,不正確的是(C)。A.類中定義的公用靜態數據成員,可以通過類的對象來訪問B.類中定義的所有靜態數據成員,都必須在類外初始化C.靜態數據成員不是所有對象所共用的D.普通的成員函數可以直接訪問類中的靜態數據成員18、如果表達式++i*k中的“++”和“*”都是重載的友元運算符,若采用運算符函數調用格式,則表達式還可以表示為(B)。A.operator*++(),k)B.operator*(operator++(i),k)C.++().operator*(k)D.*(operator++(i))19、下面對模板的聲明,正確的是(C)。A.template<T> B.template<classT1,T2>C.template<classT1,classT2>D.template<classT1;classT2>20、下列的各類函數中,(C)不是類的成員函數A.構造函數B. 析構函數 C. 友元函數 D.復制構造函數二、填空題(前14個空,每空1分,后3個空,每空2分,共20分)1、類和對象的關系可表述為:類是對象的 抽象,而對象則是類的」1。2、靜態成員函數沒有隱含的 this指針,所以,在C++?序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。3、在圖1中,A,B,C,D,E,F均是類,其中屬于單繼承的派生類有E,屬于多繼承的派生類有D、F,類F的基類有A、B、GDE,類A的派生類有D、F。圖1類的繼承層次圖4、如果只想保留公共基類的一個復制,就必須使用關鍵字 virtual把這個公共基類聲明為虛基類。5、從實現的角度來講,多態性可以劃分為兩類: 靜態多態性和動態多態性。6、如果一個類包含一個或多個純虛函數,則該類稱為抽象類。7、若要把voidfun()定義為類A的友元函數,則應在類A勺定義中加入語句friendvoidfun(A&a)。8、列出C+”的兩種代碼復用方式: 繼承和組合或模板9、析構函數的作用是 在對象被系統釋放之前做一些內存清理工作10、假定A是一個類名,則該類的拷貝構造函數的原型說明語句為: A(constA&)11、后置自增運算符“++”重載為類的成員函數(設類名為A)的形式為:Aoperator++(int)三、閱讀下面4個程序,寫出程序運行時輸出的結果。(共13分)#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;}解1、a=89,b=56,c=12#include<iostream>usingnamespacestd;classA{public:A(){cout<<"A";}};classB{public:B(){cout<<"B";}};classC:publicA{public:C(){cout<<"C";}private:Bb;};intmain(){Cobj;return0;}解2、ABC#include<iostream>usingnamespacestd;classA{public:A(){cout<<"A::A()called.\n";}virtual~A(){cout<<"A::~A()called.\n";}};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;}解3、A::A()called.B::~B()called.A::~A()called.B::B()called.、#include<iostream>usingnamespacestd;classA{public:voidf(){cout<<"CallA'sfunctionf()"<<endl;}};classB{public:voidf(){cout<<"CallB'sfunctionf()"<<endl;}voidg(){cout<<"CallB'sfunctiong()"<<endl;}};classC:publicA,publicB{public:voidg(){cout<<"CallC'sfunctiong()"<<endl;}};intmain(){Ccc;::f();::g();();return0;}解4、CallB'sfunctionf()CallB'sfunctiong()CallC'sfunctiong()四、編程題(27分)1、(10分)已知復數類CompleX勺聲明如下:classComplex{public:Complex(); //無參構造函數Complex(double); // 轉換構造函數Complex(double,double);//有兩個形參的構造函數friendComplexoperator+(Complex&,Complex&);// 對“+”運算符進行重載friendostream&operator<<(ostream&,Complex&);// 對“<<”運算符進行重載friendistream&operator>>(istream&,Complex&);// 對“>>”運算符進行重載private:doublereal,imag;};要求:(1)寫出該類的所有構造函數的類外定義代碼。(2)寫出對運算符“ +”、“<<”、“>>”進行重載的運算符重載函數的定義。2、(17分)下列Shap族是一個表示形狀的抽象類,area()為求圖形面積的函數,total()則是一個通用的用以求不同形狀的圖形面積總和的函數。classShape{public:virtualdoublearea()=0;};doubletotal(Shape*s[],intn){doublesum=;for(inti=0;i<n;i++) sum+=s[i]->area();returnsum;}要求:(1)從Shape類派生圓類(Circle)、正方形類(Square),圓類新增數據成員半徑(radius),正方形類新增數據成員邊長( a),圓類和正方形類都有構造函數,修改、顯示數據成員值的函數,求面積函數。(2)寫出main()函數,計算半徑為的圓和邊長為的正方形的面積和(必須通過調用total函數計算)。四、編程題(共 27分)(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;=+;=+;returnc;}ostream&operator<<(ostream&output,Complex&c){output<<"("<<<<"+"<<<<"i)"<<endl;returnoutput;}istream&operator>>(istream&input,Complex&c){cout<<"inputrealandimaginaryparto

溫馨提示

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

評論

0/150

提交評論