![《C++面向對象程序設計》期末考試試習題_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/25/21b66908-f482-48d4-9976-30469d05accb/21b66908-f482-48d4-9976-30469d05accb1.gif)
![《C++面向對象程序設計》期末考試試習題_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/25/21b66908-f482-48d4-9976-30469d05accb/21b66908-f482-48d4-9976-30469d05accb2.gif)
![《C++面向對象程序設計》期末考試試習題_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/25/21b66908-f482-48d4-9976-30469d05accb/21b66908-f482-48d4-9976-30469d05accb3.gif)
![《C++面向對象程序設計》期末考試試習題_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/25/21b66908-f482-48d4-9976-30469d05accb/21b66908-f482-48d4-9976-30469d05accb4.gif)
![《C++面向對象程序設計》期末考試試習題_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/25/21b66908-f482-48d4-9976-30469d05accb/21b66908-f482-48d4-9976-30469d05accb5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+面向對象程序設計考試試題² 本試卷滿分100分;² 請將答案寫在答題紙上,寫明題號,不必抄題,字跡工整、清晰;² 請在答題紙和試題紙上都寫上你的班級,學號和姓名,交卷時請將試題紙、答題紙和草紙一并交上來。 一、 單選題(共10分,每題1分) 1. C+中解決命名沖突的機制是:D(A) 虛基類 (B) 虛函數(shù) (C) 函數(shù)重載 (D) 名字空間2. 若類A的一個對象所占的內存空間中包含虛函數(shù)表的入口地址,則: C(A) 類A不能有靜態(tài)數(shù)據(jù)成員(B) 類A中公有的成員函數(shù)一定是虛的(C) 類A中至少有一個成員函數(shù)是虛的(D) 類A的析構函數(shù)一定是虛的3任意一個類,
2、析構函數(shù)的個數(shù)最多是:B(A) 不限個數(shù) (B) 1 (C) 2 (D) 34 下列關于this指針的說法,哪個是正確的: D(A) this指針一定指向常量型數(shù)據(jù) (B) this指向的數(shù)據(jù)不可更改(C) 靜態(tài)成員函數(shù)中也可以訪問this指針 (D) this指針本身可直接作為成員函數(shù)的返回值5在類定義中,為說明成員的訪問權限,private, protected, public 可以出現(xiàn)次數(shù)為:A(A)次數(shù)沒有具體限定 (B) 每種至多一次(C) public 至少一次 (D) 每種至少一次6下面哪種定義方式是正確的,并且使得p可以作為函數(shù)void f( A* const pp);的實參:
3、A(A)A * p = new A; (B)A a; A* p = a; (C)const A* p = new A; (D)A a; const A* p = a;7 obj是類A的一個對象,執(zhí)行語句 const A& aA= obj; ,則下列說法正確的是: C(A)類A的拷貝構造函數(shù)會被調用 (B)類A的賦值函數(shù)會被調用(C)&aA的值就是 &obj (D) 語句obj.f( );等價于語句aA.f( );8下面關于訪問類A的私有數(shù)據(jù)成員的說法,錯誤的是: C(A)類A的友元函數(shù)可以訪問類A的私有成員。 (B)類A的友元類中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。
4、(C)類A的嵌套類中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。(D)類A中的非靜態(tài)成員函數(shù)可以訪問類A的私有成員。 9類A中有唯一的一個成員函數(shù)f,且f是公有的靜態(tài)或非靜態(tài)成員函數(shù),對于類A的一個對象a,執(zhí)行語句 a.f(100);成功,那么f 的函數(shù)原型不可以是:B(A) A& f( int, int=50 ); (B) void f(int& ) ;(C) const A * f(const int ); (D) A f( const int&);10. 下面關于類的成員函數(shù)描述不正確的是:A(A) 靜態(tài)成員函數(shù)內可以直接訪問類的非靜態(tài)成員數(shù)據(jù)(B) 靜態(tài)成員函數(shù)內可
5、以直接訪問類的靜態(tài)成員數(shù)據(jù)(C) 非靜態(tài)成員函數(shù)可以直接訪問類的非靜態(tài)成員數(shù)據(jù)(D) 非靜態(tài)成員函數(shù)可以直接訪問類的靜態(tài)成員數(shù)據(jù)(全局成員)二、判斷正誤,對于你認為錯誤的論述,說明原因或舉出反例。(每題2分,共20分)1. 重載流操作符<<和>> 時,如果第一個參數(shù)的類型為ostream 和istream,那么這個重載函數(shù)既可以用于標準輸入輸出流,也可以用于文件流上。對,ostream 和istream是標準輸入輸出流、文件流、字符串流的基類2. 在同一個類中,可以定義重載的成員函數(shù) void f(int);和virtual void f(int); 。錯,這屬于重復定
6、義3. 抽象類不會產生實例,所以不需要有構造函數(shù)。錯,被派生時需要它的構造函數(shù)4. 類A有一個非靜態(tài)的成員函數(shù)f,其函數(shù)原型是:void A:f( ) const,則該函數(shù)被調用時,一定是通過類A或類A的某后裔類的一個用const修飾符說明的常量對象調用的。錯,常函數(shù)可以由變量對象或常量對象調用5. 異常必須在其產生的當前函數(shù)中捕獲,而不能在外層函數(shù)中捕獲該異常。錯,可以在外層捕獲,并且這是最常見的用法6. 只要程序中沒有A a1 = a2; 和A a1(a2); 形式的代碼,類A的拷貝構造函數(shù)就不會被調用。錯,參數(shù)傳遞或函數(shù)返回時也調用拷貝構造函數(shù)7. 在protected繼承方式下,派生類
7、對象的指針不能直接轉換成指向基類對象的指針。對,否則基類中的公有成員由不可見變?yōu)榭梢姡瑱嘞薇环糯?. 若靜態(tài)成員函數(shù)中調用了一個函數(shù)f,那么f 一定不是虛函數(shù)。對,靜態(tài)成員函數(shù)不能是虛函數(shù),因為虛函數(shù)入口需要在保存在對象中的虛函數(shù)表中,而靜態(tài)成員函數(shù)不屬于對象。9. 若要實例化一個含有引用型數(shù)據(jù)成員的類,那么只能使用構造函數(shù)初始化列表來初始化該數(shù)據(jù)成員。對,沒有別的辦法10. 構造函數(shù)的函數(shù)體中,不能使用return語句;但在實現(xiàn)該類的自動類型轉化函數(shù)時,必須有return 語句。對三、回答下列各題(每題4分,共20分)1. 舉例說明static關鍵字的用法和相應目的(至少3種)。f() st
8、atic int a; 函數(shù)體內的靜態(tài)變量,每次調用該函數(shù)時值保持不變static int a; 全局的靜態(tài)變量,約束作用域為所在文件class A static int a; A的靜態(tài)成員,類似全局變量,需用A:a訪問2. 舉例說明類的數(shù)據(jù)成員在哪些情況下必須在初始化列表中進行初始化(至少3種)。基類不提供無參的構造函數(shù)成員對象不提供無參的構造函數(shù)有常量成員或引用成員3. 舉例說明虛擬繼承的作用和目的。虛擬繼承的目的是使基類在派生類中只保留一個副本從而避免二義性4. 舉例說明成員函數(shù)A& f( ) const;和成員函數(shù)A& f( ); 的區(qū)別。A& f( ) con
9、st是常函數(shù),隱含的this指針是常指針,因此在f中不能修改對象成員的值。舉例略5. 有類A的對象a,任意給出一種解決方案,使得程序支持下面的表達式:a=10+a; class A A(int); /轉換構造函數(shù)friend const A operator+(const A,const A); /重載+;四、指出下列程序代碼中存在的錯誤或不足,說明原因。(每題5分,共10分)1#include<iostream.h>class A public: virtual A( ) virtual void f( ) cout<<"A:f( )"<&l
10、t;endl; virtual void g( ) cout<<"A:g( )"<<endl; ;class B:public Apublic: virtual void g( ) cout<<"B:g( )"<<endl; virtual void k( ) cout<<"B:k( )"<<endl;void main( ) A * p= new B; p->f( ); p->g( ); p->k( ); delete p;答:函數(shù)k在A中沒有
11、定義,執(zhí)行p->k( );時要根據(jù)p的類型在A中查k的信息2#include<iostream.h>#include<string.h>class A;class B:public A public: B(const char* info) m_buf=new char256; strcpy(m_buf,info); B( ) delete m_buf; virtual void output( ) cout << m_buf; private: char * m_buf; ;class A public: A( ) virtual void outp
12、ut( ) ;void main() A*pa = new B("hello!") ; pa->output( ); delete pa; 答:A的析構函數(shù)應定義為虛函數(shù),否則B的析構函數(shù)不會被調用,m_buf也不會被釋放五、寫出下面程序的運行結果(每題5分,共10分) 1#include <iostream.h> class A public: A( ):count(1) virtual A( ) virtual A* Copy( ) const = 0; virtual void Out( ) const = 0;protected: int coun
13、t;class B:public A public: B( ) -count; Out( ); virtual A* Copy( ) const B *p = new B(*this); +p->count; return p; virtual void Out( ) const cout << count << endl; ;void main( ) B b; A* a1=&b; a1->Out( ); a1 = a1->Copy( ); a1->Out( ); delete a1; 答:1210 -2#include <iost
14、ream.h> class A public: A(int n):num(n) Out( ); A(const A& rhs):num(rhs.num) Out( ); void Out( ) cout<<num<<endl; public: int num;class B:public A public: B(A& a) :obj(a),A(1) void Out( ) obj.Out( ); private: A obj;void main( ) A a(8); B b1(a); B b2(b1); b2.Out();答:818188-六、閱讀
15、下面兩個類的定義和部分實現(xiàn)代碼,完成3個問題。(共10分)#include<iostream.h>class A public: A(int n):value(n) void Display( ) const cout<<"Value = "<<value<<endl; private: int value; class B public: B(int n); void Display( ) const aA.Display(); private: A aA;int main( ) B b1(1);b1.Display( );
16、B b2(2);b2. Display( );return 0; 1. 3分實現(xiàn)類B的構造函數(shù),使得程序的輸出為:Value=1Value=2答:B(int n):aA(n)23分若main函數(shù)中增加了語句B b3(b1); 針對本例,說明是否有必要以公有方式自定義并實現(xiàn)類B的拷貝構造函數(shù),為什么?答:不需要,因為類B及基類A中不存在引用或指針成員,使用默認的拷貝構造函數(shù)就可以。3. 4分在不改動類A和main函數(shù)的前提下,以繼承的方式重新定義并實現(xiàn)類B,使得程序的輸出結果不變。答:class B:public A public: B(int n):A(n); void Display( )
17、const A:Display(); ;七、(共20分,每問題10分) 某程序員為了靈活地對各種的給定的曲線函數(shù)f(x)畫出其曲線圖形,設計并部分實現(xiàn)了一個曲線類curve,該類的成員數(shù)據(jù)中,count代表坐標點的個數(shù),pxs代表的數(shù)組存放這些坐標點的橫坐標,pys代表的數(shù)組存放利用f(x)計算得到的這些坐標點的縱坐標。由于不同曲線的計算公式f(x)是不同的,該程序員希望曲線函數(shù)的種類可以通過繼承curve類的方式任意增加,增加一個新的f(x)時不改變curve類中的內容,也不改變利用curve類進行圖形繪制的算法。已部分完成的curve類定義和實現(xiàn)如下:class curve public:
18、void setPxs( ) /*把獲取的橫坐標數(shù)據(jù)存放在pxs代表的數(shù)組中,并為count置值*/ double* getPxs( ) const return pxs;int getCount( ) const return count;double* getPys( ) const ;private:double* pxs;double* pys;int count;1、請按照該程序員的設計意圖給出成員函數(shù)getPys的完整實現(xiàn)。實現(xiàn)過程中,可以為curve類增加其它成員。可以假設setPxs函數(shù)已經完整實現(xiàn),不需要考慮曲線的繪制和顯示。答:class curve public:void setPxs( ) /*把獲取的橫坐標數(shù)據(jù)存放在pxs代表的數(shù)組中,并為count置值*/ double* getPxs( ) const return pxs;int getCount( ) const return count;double* getPys( ) const ;virtual double f(double)=0;private:double* pxs;double* pys;int count;double* curve:getPys( ) const if(pys=NUL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包合同續(xù)簽申請書
- 中國戲曲學院《大學數(shù)學Ⅱ微積分》2023-2024學年第二學期期末試卷
- 小型裝飾裝修工程施工合同范本
- 云南文化藝術職業(yè)學院《經濟數(shù)學(2)》2023-2024學年第二學期期末試卷
- 出租車司機聘用合同范本
- 甘肅衛(wèi)生職業(yè)學院《數(shù)學課堂教學技能訓練與評價》2023-2024學年第二學期期末試卷
- 湖南文理學院芙蓉學院《數(shù)學教學技能訓練》2023-2024學年第二學期期末試卷
- 學校物業(yè)管理服務合同范本模板
- 委托代建合同范本
- 幼兒園勞務派遣合同書資訊
- 【高速鐵路乘務工作存在的問題及對策研究9800字】
- 北師大版英語課文同步字帖三年級下冊課文對話原文及翻譯衡水體英語字帖三年級起點
- GB/T 2550-2016氣體焊接設備焊接、切割和類似作業(yè)用橡膠軟管
- GB/T 21295-2014服裝理化性能的技術要求
- 2022年行業(yè)報告我國FEVE氟樹脂涂料發(fā)展現(xiàn)狀及展望
- 焊口外觀檢查記錄
- 走向核心素養(yǎng)深度學習的教學實踐課件
- Y2系列電機樣本
- 市域社會治理現(xiàn)代化解決方案
- 許慎《說文解字》(全文)
- 我國應急通信保障能力評估體系探究(金)
評論
0/150
提交評論