




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+確序設計模擬試卷(五)一、單項選擇題(本大題共20小題,每小題1分,共20分)在每小題列出的四個備選項中 只有一個是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。1.靜態(tài)成員函數沒有()A. 返回值B. this 指針C. 指針參數D. 返回類型答案:B解析:靜態(tài)成員函數是普通的函數前加入static,它具有函數的所有的特征:返回類型、形參,所以使用靜態(tài)成員函數,指針可以作為形參,也具有返回值。靜態(tài)成員是類具有的 屬性,不是對象的特征,而this表示的是隱藏的對象的指針,因此靜態(tài)成員函數沒有this指針。靜態(tài)成員函數當在類外定義時,要注意不能使用static關鍵字作
2、為前綴。由于靜態(tài)成員函數在類中只有一個拷貝(副本),因此它訪問對象的成員時要受到一些限制:靜態(tài)成員函數可以直接 訪問類中說明的靜態(tài)成員,但不能直接訪問類中說明的非靜態(tài)成員;若要訪問非靜態(tài)成員時,必 須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。2. 在類的定義中,用于為對象分配內存空間,對類的數據成員進行初始化并執(zhí)行其他內部管 理操作的函數是()A. 友元函數B. 虛函數C. 構造函數D. 析構函數答案: C解析:定義構造函數作用就是初始化對象,而析構函數釋放對象空間。虛函數用于完成多 態(tài)性,友元增加訪問方便性。3. 所有在函數中定義的變量,都是()A. 全局變量B. 局部變量C. 靜
3、態(tài)變量D. 寄存器變量答案: B解析:變量存儲類可分為兩類:全局變量和局部變量。(1)全局變量:在函數外部定義的變量稱為全局變量,其作用域為:從定義變量的位置開始 到源程序結束。全局變量增加了函數之間數據聯系的渠道,全局變量作用域內的函數,均可使用 、修改該全局變量的值,但是使用全局變量降低了程序的可理解性,軟件工程學提倡盡量避免使 用全局變量。(2)局部變量:在函數內部定義的變量稱為局部變量,其作用域為:從定義變量的位置開始 到函數結束。局部變量包含自動變量( auto )靜態(tài)變量(static )以及函數參數。auto變量意味著變量的存儲空間的分配與釋放是自動進行的。說明符auto可以省略
4、。函數中的局部變量存放在棧空間。在函數開始運行時,局部變量被分配內存單元,函數結束時,局部變 量釋放內存單元。因此,任兩個函數中的局部變量可以同名,因其占有不同的內存單元而不影響 使用。這有利于實現軟件開發(fā)的模塊化。static變量是定義在函數體內的變量,存放在靜態(tài)存儲區(qū),不用棧空間存儲,其值并不隨存 儲空間的釋放而消失。4. 假定AB為一個類,則執(zhí)行“ AB a(2), b: 3 ,*p : 4; ”語句時調用該類構造函數的次數為()A. 3B. 4C. 5D. 9答案: B解析:a(2)調用1次帶參數的構造函數,b : 3調用3次無參數的構造函數,指針沒有給它 分配空間,沒有調用構造函數。
5、所以共調用構造函數的次數為4。5. 如果表達式+a中的“ +”是作為成員函數重載的運算符,若采用運算符函數調用格式,則 可表示為()A. a.operator+(1)B. operator+(a)C. operator+(a,1)D. a.operator+()答案: D解析:運算符的重載,前綴先讓變量變化。調用+ +a,等價為a.operato葉+(),注意無參的形式。后綴的話a+,等價于a.operator(0),帶形參,形參名可省。6. 已知f1和f2是同一類的兩個成員函數,但 f1不能直接調用f2,這說明()A. f1和f2都是靜態(tài)函數B. f1 不是靜態(tài)函數, f2 是靜態(tài)函數C.
6、f1是靜態(tài)函數,f2不是靜態(tài)函數D. fl和f2都不是靜態(tài)函數答案:C解析:普通成員函數可以調用靜態(tài)函數,相反靜態(tài)函數不能調用普通成員函數,這與普通函數與常成員函數相同。因此選擇Co7. 一個函數功能不太復雜,但要求被頻繁調用,則應把它定義為()A. 內聯函數B. 重載函數C. 遞歸函數D. 嵌套函數答案: A解析:內聯函數特征代碼少,頻繁調用,執(zhí)行效率高。重載函數解決統一接口的問題;遞歸是子程序調用,程序調用要耗費很多空間和時間,循環(huán)/迭代都比遞歸有效率得多,遞歸只是從形式上,邏輯比較簡潔。嵌套函數即反復調用,速度較慢。所以選擇Ago8. 解決定義二義性問題的方法有()A. 只能使用作用域分
7、辨運算符B. 使用作用域分辨運算符或成員名限定C. 使用作用域分辨運算符或虛基類D. 使用成員名限定或賦值兼容規(guī)則答案: B解析:解決二義性問題主要要兩種方法:(1)賦值兼容規(guī)則;(2)虛基類。9. 在main函數中可以用p.a的形式訪問派生類對象p的基類成員a,其中a是()A. 私有繼承的公有成員B. 公有繼承的私有成員C. 公有繼承的保護成員D. 公有繼承的公有成員答案: D解析:公有成員可以在類外訪問,保護類型成員可以在派生類中訪問,但不能在類外訪問,在main函數中訪問,說明a是公有成員。只有公有繼承時a才能是公有的,所以D項正確。10. 在C+中不返回任何類型的函數應該說明為()A.
8、 intB. charC. voidD. double答案: C解析:無形參或無返回值都可以用void來聲明,int char double分別是整型、字符型和實型。11. 若Sample類中的一個成員函數說明如下:void set(Sample& a),則 Sample& a 的含義是()A. 指向類Sample的名為a的指針B. a是類Sample的對象引用,用來作函數 Set ()的形參C. 將a的地址賦給變量SetD. 變量Sample與a按位與的結果作為函數 Set的參數答案: B解析:成員函數使用對象的引用作為形參。該函數的功能是將已知對象的所有數據成員的值拷貝給相應對象的所有數據
9、成員,不會建立臨時對象,這里是對象的引用所以選擇Bo12. 要實現動態(tài)聯編必須()A. 通過成員名限定來調用虛函數B. 通過對象名來調用虛函數C. 通過派生類對象來調用虛函數D. 通過對象指針或引用來調用虛函數答案: D解析:通過基類指針或基類引用來調用虛函數實現動態(tài)多態(tài)性,靜態(tài)多態(tài)性通過重載來實現的。所以選擇D項。13. 在派生類中定義虛函數時,可以與基類中相應的虛函數不同的是()A. 參數類型B. 參數個數C. 函數名稱D. 函數體答案: D解析:虛函數在基類和派生類,具有相同的返回類型、形參類型和形參個數,而函數體可以根據不同的派生類或基類實現不同的操作,即不同函數體。14. 實現兩個相
10、同類型數加法的函數模板的聲明是()A. add (T x,T y)B. T add(x,y)C. T add(T x,y)D. T add(T x,T y)答案: D解析:實現兩個相同類型數加法結果應該和操作數具有相同類型。進行加法運算后結果也是和參數具有相同類型,需要返回值。A無返回值時要用void,B形參無類型,C形參y沒有類型,所以選擇項。15. 下列不是描述類的成員函數的是()A. 構造函數B. 析構函數C. 友元函數D. 拷貝構造函數答案:C解析:友元函數雖然不是成員函數但是可以訪問類所有成員。構造函數、析構函數和拷貝 構造函數(復制構造函數)都是類的特殊函數用于對象的創(chuàng)建和撤銷,所
11、以選擇cm。16. 繼承機制的作用是()A. 信息隱藏B. 數據封裝C. 定義新類D. 數據抽象答案: C解析:面向對象設計中的類的特點:抽象、封裝、繼承和多態(tài)等,繼承用于對類的擴展 ,所以選擇cm。17. 已知:p是一個指向類A數據成員m的指針,A1是類A的一個對象。如果要給 m賦值為5,正確 的是()A. A1.p=5;B. A1-p=5;C. A1.*p=5;D. *A1.p=5;答案: C解析:A中p是指針即地址,錯誤;E選項中A1不是指針不能使用指向運算符 -,錯誤* ”比“.”級別要高,所以D選項*A1.p=5相當于(*A1).p=5;錯誤。另外涉及到指向成員函數 時注意以下幾點:
12、指向成員函數的指針必須于其賦值的函數類型匹配的三個方面:(1)參數類型和個數;(2)返回類型;(3)它所屬的類類型。成員函數指針的聲明:指向 short型的Screen類的成員的指針定義如下:short Screen:* ps_Screen;ps_Screen 可以用 _height 的地址初始化如下:short Screen:*ps_Screen=&Screen:_height;類成員的指針必須總是通過特定的對象或指向改類型的對象的指針來訪問。是通過使用兩個指 向成員操作符的指針(針對類對象和引用的.*,以及針對指向類對象的指針的-*)。18. 如果采用動態(tài)多態(tài)性,要調用虛函數的是()A.
13、基類對象指針B. 對象名C. 基類對象D. 派生類名答案: A解析:基類指針或者基類的引用調用虛函數都會產生動態(tài)多態(tài)性19. 若有以下定義,則說法錯誤的是()int a=100,*p=&a;A. 聲明變量p,其中*表示p是一個指針變量B. 變量p經初始化,獲得變量a的地址C. 變量p只可以指向一個整型變量D. 變量p的值為100答案: D解析:指針變量如同其他變量一樣,在使用之前必須先聲明。聲明指針變量的格式為:*;其中,是指針變量所指向對象的類型,它可以是 C+語言預定義的類型,也可以是用戶 自定義類型。是用戶自定義的標識符。符號 *表示 變量是指針變量。而不是普通變量 。*表示指針,p是變
14、量,p指向一個整型的變量,值為 a的地址值,*p=100。20. C+語言建立類族是通過()A. 類的嵌套B. 類的繼承C. 虛函數D. 抽象類答案: B解析:類族即同一個類派生出來的類,各個類是兄弟或父子關系。二、填空題(本大題共20小題,每小題1分,共20分)請在每小題的空格中填上正確答 案。錯填、不填均無分。1. 假設int a=1,b=2;則表達式(+a/b)*b- 的值為。答案: 2解析前綴+或一一表示先使變量值變化,再使用,這和后綴恰恰相反。但是編譯cout(+a/b)*b-時,先 +a/b 值為 1,后 1*b-,先取 b = 2,結果為 2,再讓 b= 1。2. 復制構造函數使
15、用作為形式參數。答案:對象的引用解析復制構造函數使用對象的引用來初始化一個新對象,避免臨時產生對象。3. 通過C+語言中的機制,可以從現存類中構建其子類。答案:繼承解析繼承概念,從現有的類生成新類,原有的類稱為父類或基類,新類又稱子類或派生類或 衍生類,它是對基類的擴充。4. 靜態(tài)成員函數、友元函數、構造函數和析構函數中,不屬于成員函數的是o答案:友元函數解析友元函數不是類成員,但可以訪問類成員。類的封裝性保證了數據的安全,但引入友元 ,雖然訪問類是方便了,但確實破壞類訪問的安全性。5. 在下面的類定義中,私有成員有oclass Locationint X,Y;protected:int ze
16、roX,zerxY;int SetZero(intzeroX, intzeroY);private:int length,height;public:void init(int initX,int initY);int GetX();int GetY();答案: X,Y,length,height6. 在C+g序設計中,建立繼承關系倒掛的樹應使用繼承。答案:單解析一個基類可以派生多個子類,一個子類可以再派生出多個子類,這樣就形成了一個倒立 的樹。7. C+支持的兩種多態(tài)性分別是_多態(tài)性和運行多態(tài)性。答案:靜態(tài)或編譯解析多態(tài)性包括靜態(tài)(編譯時)的和動態(tài)(運行時)的動態(tài)性。8. C+中語句cons
17、t char * const p=“hello ”;所定義的指針p和它所指的內容都不能被 答案:修改解析使用const修改的內容不能修改,這里同時修飾地址和值,表示地址和值都不變。9. 在C+中,定義虛函數的關鍵字是 。答案: virtual解析在普通函數前面用 virtual修飾的函數,就稱為虛函數。10. 采用私有派生方式,基類的 public成員在私有派生類中是 成員。 答案:私有11. 對賦值運算符進行重載時,應聲明為函數。答案:類成員解析運算符重載的方法有友元或者成員函數兩種途徑,但是賦值運算符只能使用成員函數的 方法來實現。12. 在C+中有兩種參數傳遞方式即值傳遞和傳遞。答案:引
18、用解析函數參數傳遞有傳值和傳引用兩種。13. 預處理命令以符號開頭。答案: operater解析文件包含、預處理和編譯都是以#開頭。14. 在構造函數和析構函數中調用虛函數時采用。答案:靜態(tài)聯編解析在析構或構造函數調用虛函數發(fā)生靜態(tài)多態(tài)性。15. C+是通過引用運算符 來定義一個引用的。答案:&解析引用是C不具有使用方法,它表示變量的別名,在函數中使用很頻繁,因為調用形式同 傳值調用,但修改形參實參也會相應改變的特征。16. 如果要把類 曲勺成員函數void fun() 說明為類A的友元函數,則應在類A中加入語句 答案:friend void B:fun();解析聲明成員函數作為另外一個類的友
19、元函數時,使用類作用域運算符:。17. 如果要把PI聲明為值為3.14159類型為雙精度實數的符號常量,該聲明語句是。答案:)const double PI(3.14159); 或者 const double PI = 3.14159;解析使用const聲明符號常量,常量和常量值可以用括號也可以賦值號。18. 在C+ +四個流對象中,用于標準屏幕輸出。答案: cout解析cin、cout、cerr和clog中cin用于輸入,cout用于輸出,cerr、clog 錯誤處理。19. 執(zhí)行下列代碼int a=32;double c=32;cout.setf(ios:hex);couthex:a=a,
20、c=ce ndl;cout.unsetf(ios:hex);程序的輸出結果為o答案:hex:a=20,c=32解析用十六進制只能輸出整型數據,而不能將其它類型數據轉換成十六進制的數據輸出。所以double類型不變仍然是32 (double類型)。20. 已知有20個元素int類型向量V1,若用V1初始化為V2向量,語句是_。答案: ector V2(V1);解析采用向量初始化另一個向量的形式:vector name1(name);三、改錯題(本大題共5小題,每小題4分,共20分)1. #include class A private:int x;public:A(int i)x=i;A()x=
21、0;friend int min(A&,A&);int min(A & a,A &b) return (a.xb.x)?a.x:b.x;void main() A a(3),b(5);couta.min(a,b)endl;答案:couta.min(a,b)endl;友元函數不是類成員,所以對象a不能使用a.min(a,b)這種方法o min就是一個普通的友元函數。修改coutmin(a,b)endl;2. #include class shapepublic:virtual int area()return 0;class rectangle:public shapepublic:int a,
22、 b;void setLength (int x, int y) a=x;b=y;int area() return a*b;void main()rectangle r;r.setLength(3,5);shape s1,*s2=&r;cout r.area() endl;s2=s1;cout s2.area()endl;答案:shape s1,*s2=r;指針使用錯誤。s是指針使用它指向對象的成員有兩種方法,有下面兩行 可知,使用的是引用。修改改為shape &s=r;3. 下面的類定義中有一處錯誤,請用下橫線標出錯誤所在行并給出修改意見。#include template class A
23、private:T x,y,s;public:A(T a,T b)x=a,y=b;s=x+y;void show()coutx+y=se ndl;void main() A add(10,100);add.show();答案:修改A add(10,100);解析A add(10,100);類模板的使用,參數實例化后生成模板類。用類模板定義對象時要指定 參數類型。4. 生成具有n個元素的動態(tài)數組。#include void main()int n;cinn;int a n;a : 0 =2;couta 0 endl;答案:int a n;生成具有n個元素的動態(tài)數組,要使用new,所以int a
24、n;錯誤。修改int *a=new int n ;5. #include class Aint i;public:virtual void fun()=0;A(int a)i=a;class B:public Aint j;public:void fun()coutB:fun() 、n; B(int m,int n=0):A(m),j(n);void main()A *pa;B b(7);pa=&b;答案:B(int m,int n=0):A(m),j(n)因為基類是抽象類,不能被實例化,所以在派生類中不能調用初始化基類對象。所以B(int m,int n=0):A(m),j(n)錯誤,刪去A
25、(m)。修改B(int m,int n=0):j(n)四、完成程序題(本大題共5小題,每小題4分,共20分)1. 在下面程序橫線處填上適當字句,以使該程序執(zhí)行結果為:50 4 34 21 100 7.1 8.1 9.1 10.1 11.1#include template void f ();for (int i=0;in/2;i+)t=a i , a i =a n-1-i , a n-1-i =t;void main ()int a 5 =10,21,34,4,50;double d 6 =11.1,10.1,9.1,8.1,7.1;f(a,5);f(d,6);for (int i=0;i5
26、;i+)cout a i ;cout endl;for (i=0;i6;i+)cout d i ;cout endl;答案:T a ,int n,T t=0;解析不同的數據類型的調用,使用了模板。f函數增加t變量,因為實參類型不同,所以類型應該是僕型的。2. 完成下面類中成員函數的定義。#include #include class Arrprotected:float *p;int n;數組大小(元素個數)public:Arr(int sz=10) n=sz;p=new float n;Arr(void) int Getn(void) constreturn n;float & operat
27、or 口 (int i) void Print();void Arr:Print()int i;for(i=0;iGetn();i+)if (i%10=0)cout endl;coutsetw(6)p i ;coutendl;void main()Arr a(20);for (int i=0;ia.Getn();i+)a : i =i* 2;a.Print();答案:delete p; , return p i ;解析在析構函數中釋放對象空間。第二個是對運算符的重載,函數返回類型是實型,形 參i,取得下標為i的元素的值。3. 下面是一個輸入半徑,輸出其面積和周長的C+確序,在下劃線處填上正確的
28、語句。#include void main()double rad;coutrad;double l=2.0*pi*rad;double s=pi*rad*rad;cout n The long is : lendl;coutThe area is : sendl;答案:using namespace std,#define pi 3.14159解析進行輸入或輸出要引入iostream, 所以using namespace std;從標點看沒有分號,所以使用宏定義,#define pi 3.14159。4. 在下劃線處填上缺少的部分。#include class Samppublic:void
29、 Setij(int a,int b)i=a,j=b;Samp()coutDestroying.iendl;int GetMuti()return i*j;protected:int i;int j;int main()Samp *p;p=new Samp 5;if(!p)coutvAllocation error n;return 1;for(int j=0;j5;j+)p j 1 -Setij(j,j);for(int k=0;k5;k+)coutMuti vvkvv 1 is:vp k 1 .class Aint a;public:A(int i=0)a=i;int Geta()retu
30、rn a;void show()coutvvavvendl;class BA a;int b;public:B(i nt i,i nt j)void show()coutvva.Geta()vv,vvbvvendl;void main()B b 21 =B(10,11),B(12,13);for(int i=0;iv2;i+)答案::a(j),b(i), b i 1 .show();解析1在構造函數中對數據成員初始化,從結果先輸出 a,后b,所以對a = j , b=i;在循環(huán)中 輸出成員,調用show成員。五、程序分析題(本大題共2小題,每小題5分,共10分)1.給出下面程序輸出結果。#in
31、clude viostream.hclass Baseprivate:int Y;public:Base(int y=0) Y=y;coutvvBase(vvyvv) n;Base() coutvvBase() n;void print() cout vvYvv ;class Derived:public Baseprivate:int乙public:Derived (int y, int z):Base(y)Z=z;coutvvDerived(vvyvv,vvzvv) n;Derived() cout Derived() n;void print()Base:print(); coutZendl;void main()Derived d(10,20);d.print();答案:Base(10)Derived(10,20)10 20Derived()Base()解析派生類對象,先調用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同范本打字
- 吊車租賃續(xù)簽合同范本
- 內衣合伙人協議合同范本
- 醫(yī)療器械委托申報合同范本
- 單位勞動終止合同范本
- 住宅裝修交付合同范本
- 制作安裝窗戶合同范例
- 驛站轉租定金合同范本
- 合資商鋪合同范本
- 北京裝修合同范本查詢
- 二級WPS Office高級應用與設計計算機等級考試試題與參考答案(2024年)
- 電子商務專業(yè)綜合技能測試題(附參考答案)
- 前程無憂測評題庫及答案
- 全腦血管造影術的護理查房
- 直系親屬股權無償轉讓合同(2篇)
- 內鏡下內痔治療
- 2025年四年級下學期語文教學計劃
- 消防工程施工組織設計方案
- 2024年國家公務員考試《申論》真題(地市級)及答案解析
- 《現代家政導論》電子教案 4.1模塊四項目一家政教育認知
- 一年級數學個位數加減法口算練習題大全(連加法-連減法-連加減法直接打印版)
評論
0/150
提交評論