[渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)
《面向對象程序設計》模擬題
一.單選題
1.如果一個類中包含純虛函數則該類稱為().
A.抽象類
B.虛基類
C.派生類
D.子類
2.在類中將show聲明為不帶返回值的純虛函數則正確的寫法是().
A.virtual void show()=0;
B.virtual show()=0;
C.virtual void show();
D.void show()=0 virtual;
3.虛函數必須是類的().
A.構造函數
B.友元函數
C.成員函數
D.私有成員函數
4.下列關于虛函數的描述中()是正確的.
A.虛函數一定不能有函數體
B.含有虛函數的類不能定義該類對象
C.虛函數只能被重載不能被繼承
D.基類中聲明虛函數后派生類中可以不重載該虛函數
5.在C++中要實現動態聯編可以使用()調用虛函數.
A.類名
B.派生類指針
C.對象名
D.基類指針
6.下列函數中不能說明為虛函數的是().
A.私有成員函數
B.公有成員函數
C.構造函數
D.析構函數
7.一個類中的某個函數被聲明為virtual則該函數在該類的所有派生類中().
A.都是虛函數
B.重載后才是虛函數
C.被重新說明為virtual時才是虛函數
D.不是虛函數
8.類B是類A的公有派生類類A和類B中都定義了虛函數func()p是一個指向類A的指針則p->func()將().
A.調用類A中的函數func()
B.調用類B中的函數func()
C.根據p實際所指對象類型確定調用A或B類中的函數func()
D.同時調用A類和B類中的函數func()
9.下列關于虛函數的說明中正確的是().
A.從虛基類繼承的函數都是虛函數
B.虛函數不能是靜態成員函數
C.通過對象不能調用虛函數
D.抽象類中的函數都是虛函數
10.有一個重載運算符的函數參數表中沒有任何參數則可以斷定被重載的運算符函數是().
A.單目友元函數
B.單目成員函數
C.雙目友元函數
D.雙目成員函數
11.下列關于運算符函數返回值類型的描述中錯誤的是().
A.可以是類類型
B.可以是int類型
C.可以是void類型
D.可以是float類型
12.友元運算符obj1>obj2被C++編譯器解釋為().
A.operator>(obj1obj2)
B.>(obj1obj2)
C.obj1.operator>(obj2)
D.obj2.operator>(obj1)
13.在表達式x+yz中+作為成員函數重載的運算符作為友元函數重載的運算符以下敘述中正確的是().
A.operator+有2個參數operator有2個參數
B.operator+有2個參數operator有1個參數
C.operator+有1個參數operator有2個參數
D.operator+有1個參數operator有1個參數
14.重載賦值運算符時應聲明為()函數.
A.友元
B.虛
C.成員
D.多態
15.在成員函數中進行雙目運算符重載時參數表中應有()個參數.
A.0
B.1
C.2
D.3
16.雙目運算符重載為友元函數時參數表中應有()個參數.
A.0
B.1
C.2
D.抽象類中的函數都是虛函數
17.若表達式a+b中的”+”是作為成員函數重載的運算符若采用運算符函數調用格式則可表示為().
A.a.operator+(b)
B.b.operator+(a)
C.operator+(ab)
D.雙目成員函數
18.假定M是一個類名且M中重載了操作符=可以實現M對象間的連續賦值如”m1=m2=m3;”.重載操作符=的函數原型最好是().
A.int operaotor=(constM);
B.int operator=(constM&);
C.Moperator=(constM&);
D.可以是float類型
19.下面是重載雙目運算符+的普通函數原形其中最符合+原來含義的是().
A.Value operator+(ValueValue);
B.Value operator+(Valueint);
C.Value &operator+(ValueValue);
D.obj2.operator>(obj1)
20.類模板允許我們創建一系列相關的().
A.類
B.變量
C.數組
D.operator+有1個參數operator*有1個參數
21.關于異常以下敘述中正確的是().
A.友元
B.當異常被一個catch塊處理后執行流程進入下一個catch塊
C.當一個異常被拋出后其后的第一個catch塊執行
D.多態
22.以下關于函數模板敘述正確的是().
A.函數模板也是一個具體類型的函數
B.函數模板的類型參數與函數的參數是同一個概念
C.通過使用不同的類型參數函數模板可以生成不同類型的函數
D.用函數模板定義的函數沒有類型
23.有如下函數模板定義則下列函數調用中錯誤的是().templateTfunc(T xT y){returnxx+yy;}
A.func(35);
B.func(33.5)
C.func(35.5);
D.func(33.5);
24.下列關于函數模板的描述中錯誤的是().
A.函數模板必須由程序員實例化為可執行的模板函數
B.函數模板的實例化由編譯器完成
C.一個類定義中只要有一個函數模板則這個類是類模板
D.類模板的成員函數都是函數模板
25.下列模板聲明中正確的是().
A.template
B.template
C.template
D.template
26.類模板的使用實際上是將類模板實例化為一個().
A.函數
B.對象
C.類
D.抽象類
27.下列關于異常的敘述中錯誤的是().
A.編譯錯屬于異常可以拋出
B.運行錯屬于異常
C.拋出異常后將跳過函數中的其它代碼
D.拋出的異常可以不被捕獲
28.在C++程序中使用的cin標識符是系統類庫中定義的()類中的一個對象.
A.istream
B.ostream
C.iostream
D.fstream
29.要進行文件的輸入輸出除了包含頭文件iostream外還需要包含頭文件().
A.ifstream
B.fstream
C.ostream
D.cstdio
30.定義charp=“abcd”能輸出p的值(字符串地址)的語句為().
A.cout<<&p;
B.cout<<p;
C.cout<<(char)p;
D.cout<<const_cast<void*>§;
31.用于打開二進制文件的標志是().
A.ios::binary
B.ios::in
C.ios::out
D.ios::trunc
32.下列輸出字符’B’的方法中錯誤的是().
A.cout.put(‘B’);
B.chara=’B’;cout<<a;
C.cout<<put(‘B’);
D.cout<<’B’;
33.使用setw()等操作函數設置數據輸出格式時應包含頭文件().
A.
B.
C.
D.
34.可設置輸出寬度的方法是().
A.setfill()
B.setw()
C.setprecision()
D.oct
35.面向對象程序設計思想的主要特征不包括().
A.繼承性
B.功能分解逐步求精
C.封裝性和信息隱藏
D.多態性
36.下列能用作C++標識符的是().
A._123
B.for
C.case
D.virtual
37.以下工具中()將C++源代碼轉換為目標文件.
A.編譯器
B.鏈接器
C.編輯器
D.集成開發環境
38.C++程序主函數名稱是().
A.Main
B.main
C.MAIN
D.用戶自定義函數
39.main函數的返回值類型是().
A.char
B.double
C.int
D.無返回類型
40.下列關于相同類型指針的運算中()是非法的.
A.兩個指針進行相等或不等的運算
B.將NULL賦值給某個指針變量
C.一個指針加上一個整數
D.兩個指針相加
41.下列關于動態聯編的敘述中()是錯誤的.
A.動態聯編是以虛函數為基礎的
B.動態聯編在程序運行時確定所調用的函數代碼塊
C.動態聯編調用多態函數時傳遞的是基類對象的指針或基類對象引用
D.動態聯編是在編譯時確定調用某個函數的
42.下列描述中()是抽象類的特征.
A.可以聲明虛函數
B.不能說明其對象
C.可以定義友元函數
D.可以進行構造函數重載
43.在派生類中重載一個虛函數時要求函數名.參數個數.參數類型和函數返回值().
A.相同
B.不同
C.相容
D.部分相同
44.下列關于抽象類的說明中不正確的是().
A.含有純虛函數的類稱為抽象類
B.抽象類不能被實例化
C.抽象類的派生類一定可以實例化
D.可以聲明抽象類的指針
45.下列運算符中不能使用友元函數實現的是().
A.+
B.=
C.*
D.<<
46.若表達式ab中的””是作為普通函數重載的運算符若采用運算符函數調用格式則可表示為().
A.a.operator==(b)
B.b.operator==(a)
C.operator==(ab)
D.operator==(ba)
47.對于int *p[5]以下敘述正確的是().
A.p是一個指向數組的指針所指向的數組是5個int型元素
B.p是一個指向某數組中下標為5的元素的指針該元素為int型
C.p[5]表示某個數組的第5個元素的值
D.p是一個具有5個元素的指針數組每個元素是一個int型指針
48.若一個函數無返回值則定義它時函數的類型應該為().
A.void
B.任意
C.int
D.無
49.在VC環境下int型占用的字節數為().
A.1
B.2
C.4
D.8
50.類型修飾符unsigned修飾()類型是錯誤的.
A.char
B.int
C.longint
D.float
51.已有int m=10;則屬于合法引用定義的是().
A.int &rm=m;
B.int &rm=10;
C.int &rm;rm=m;
D.int &rm=&m;
52.在C++中下列關于設置參數默認值的敘述中正確的是().
A.不允許設置參數的默認值
B.設置參數默認值時應先設置右邊的再設置左邊的
C.設置參數默認值時要么全部設置要么一個也不設置
D.設置參數默認值時應先設置左邊的再設置右邊的
53.下列對重載函數的描述中()是錯誤的.
A.重載函數中不允許使用缺省參數
B.重載函數不能通過返回值類型區分不同的版本
C.編譯系統根據參數表確定函數版本
D.類的析構函數不能重載
54.下面動態分配內存的代碼執行后正確的描述是().Int *p;p=new int[5];
A.動態開辟5個int元素初值不確定
B.動態開辟初值為5的一個int元素
C.動態開辟5個int元素初值為0
D.釋放p所指向內存的代碼為:delete p;
55.重載函數在調用時選擇的依據中()是錯誤的.
A.參數個數
B.參數類型
C.函數名字
D.函數的類型
56.已知數組定義int array[10];則最小數組下標為().
A.0
B.1
C.9
D.10
57.字符串”ab”在內存中占用的字節數為().
A.1
B.2
C.3
D.4
58.1條return語句可以返回()值.
A.1個
B.多個
C.1個或多個
D.任意
59.以下表達式中結果為false的是().
A.3.15
B.-0.5
C.0
D.‘0’
60.已知數組定義int array[10]😭)是非法的數組元素訪問.
A.array[10]
B.array[1]
C.array[0]
D.array[9]
61.下列的符號常量定義中錯誤的定義是().
A.int constM=10;
B.const intM=20;
C.const char ch;
D.const bool mark=true;
62.設array為一個數組則表達式sizeof(array)/sizeof(array[0])的結果為().
A.array數組首地址
B.array數組中元素個數
C.array數組中每個元素所占的字節數
D.array數組占的總字節數
63.用new運算符創建一個含10個元素的一維整型數組的正確語句是().
A.int *p=new a[10];
B.int *p=new float[10];
C.int *p=new int[10];
D.int *p=new int[10]={12345}
64.假定指針變量p定義為”int *p=new int[30];”要釋放p所指向的動態內存應使用語句().
A.delete p;
B.delete *p;
C.delete &p;
D.delete[]p;
65.采用重載函數的目的是().
A.實現共享
B.減少空間
C.提高速度
D.使用方便提高可讀性
66.關于封裝下列說法中不正確的是().
A.通過封裝對象的全部屬性和操作結合在一起形成一個整體
B.通過封裝一個對象的實現細節被盡可能地隱藏起來(不可見)
C.通過封裝每個對象都成為相對獨立的實體
D.通過封裝對象的屬性都是不可見的
67.面向對象方法的多態性是指().
A.一個類可以派生出多個特殊類
B.一個對象在不同的運行環境中可以有不同的變體
C.針對一消息不同的對象可以以適合自身的方式加以響應
D.一個對象可以是由多個其他對象組合而成的
68.在類作用域中能夠通過直接使用該類的()成員名進行訪問.
A.私有
B.公有
C.保護
D.任何
69.假定AA為一個類a為該類公有的數據成員px為指向該類對象的一個指針則訪問px所指對象中數據成員a的格式為().
A.px(a)
B.px[a]
C.px->a
D.px.a
70.類的析構函數是一個對象被()時自動調用的.
A.建立
B.銷毀
C.賦值
D.引用
71.設px是指向一個類對象的指針變量則執行”delete px;”語句時將自動調用該類的().
A.無參構造函數
B.帶參構造函數
C.析構函數
D.拷貝構造函數
72.類的析構函數可以帶有()個參數.
A.0
B.1
C.2
D.任意
73.靜態成員函數對類的數據成員訪問().
A.是不允許的
B.只允許是靜態數據成員
C.只允許是非靜態數據成員
D.可允許是靜態數據成員或非靜態數據成員
74.假定AB為一個類則執行”AB a(2)b[3]*p[4];”語句時共調用該類構造函數的次數為().
A.3
B.4
C.5
D.9
75.假定AA為一個類int a()為該類的一個成員函數若該成員函數在類定義體外定義則函數頭為().
A.int AA::a()
B.int AA:a()
C.AA::a()
D.AA::inta()
76.類中具有數據操作功能的是().
A.常數據成員
B.函數成員
C.數據成員
D.靜態成員
77.關鍵字()定義允許在類外部使用的成員數據和成員函數.
A.virtual
B.class
C.public
D.private
78.下列對構造函數的描述中()是錯誤的.
A.函數名與類名完全相同
B.構造函數允許重載
C.返回類型應該為void
D.構造函數允許使用缺省參數
79.已知print是某個類的常成員函數返回值類型為void正確的定義形式是().
A.void const print();
B.const void print();
C.void print() const;
D.void print(const);
80.假定MyClass為一個類執行”MyClassa[3]*p;”語句時會自動調用該類型構造函數()次.
A.2
B.3
C.4
D.5
81.下列運算符中必須使用友元函數實現的是().
A.+
B.++
C.*
D.<<
82.如果表達式a++中的”++”是作為普通函數重載的運算符若采用運算符函數調用格式則可表示為().
A.a.operator++()
B.operator++(a)
C.operator++(a1)
D.operator++(1a)
83.在C++程序中使用的cout標識符是系統類庫中定義的()類中的一個對象.
A.istream
B.ostream
C.iostream
D.fstream
84.假定AB為一個類則執行”AB x;”語句時將自動調用該類的().
A.帶參構造函數
B.無參構造函數
C.拷貝構造函數
D.賦值重載運算符
85.類的構造函數可以帶有()個參數.
A.0
B.1
C.2
D.任意
86.對類對象成員的初始化是通過構造函數中給出的()實現的.
A.函數體
B.初始化列表
C.參數表
D.初始化列表或函數體
87.假定一個類AB只含有一個整型數據成員a當用戶不定義任何構造函數時系統為該類定義的無參構造函數為().
A.AB(){a=0;}
B.AB(int aa=0):a(aa){}
C.AB(int aa):a(aa){}
D.AB(){}
88.假定AA是一個類abc是該類的一個成員函數則參數表中隱含的第一個參數為().
A.abc
B.*this
C.this
D.this&
89.下列關于析構函數的描述中()是正確的.
A.一個類中可以重載多個版本析構函數
B.析構函數名與類名完全相同
C.析構函數可以有1個或多個參數
D.析構函數不能指定返回值類型
90.假定AB為一個類x是AB類的一個對象則執行”AB y=x;”語句時將自動調用該類的().
A.復制構造函數
B.析構函數
C.缺省構造函數
D.賦值運算符函數
91.若有類Test該類的復制構造函數聲明為().
A.Test();
B.Test (constCTest&);
C.void Test(constCTest&t);
D.Test(constCTest*t);
92.以下選項中()不是類的成員函數.
A.構造函數
B.析構函數
C.友元函數
D.復制構造函數
93.構造函數在()時被調用.
A.程序編譯
B.程序裝入內存
C.創建類
D.創建對象
94.用戶能夠為類定義()個析構函數.
A.1
B.0
C.2
D.多個
95.下列函數原型中可以作為類AA構造函數的是().
A.void AA(int);
B.int AA();
C.AA(int)const;
D.AA(int);
96.友元的作用是().
A.提高程序的運行效率
B.加強類的封裝性
C.實現數據的隱藏
D.增加成員函數的種類
97.被非靜態成員函數訪問的類的數據成員().
A.可以是非靜態數據成員或靜態數據成員
B.不可能是類的靜態數據成員
C.只能是類的非靜態數據成員
D.只能是類的靜態數據成員
98.使用關鍵字()修飾的數據成員允許當前類及其派生類訪問而不允許在類的外部訪問.
A.public
B.protected
C.private
D.不指定
99.派生類的成員函數可以直接訪問基類的()成員.
A.公有
B.保護
C.公有和保護
D.私有
100.下列敘述中()不符合賦值兼容性規則.
A.基類的對象可以賦值給派生類對象
B.派生類對象可以賦值給基類的對象
C.派生類對象可以初始化基類對象的引用
D.派生類對象的地址可以賦值給基類的對象指針
101.如果采用公有繼承通過派生類對象可以訪問基類的().
A.私有成員
B.所有成員
C.保護成員
D.公有成員
102.派生類構造函數的成員初始化列表中不能包含().
A.基類的構造函數
B.派生類中成員對象的初始化
C.基類成員對象的初始化
D.派生類中一般數據成員的初始化
103.當保護繼承時基類的()在派生類中成為保護成員不能通過派生類對象來直接訪問.
A.任何成員
B.公有成員和保護成員
C.公有成員和私有成員
D.私有成員
104.設置虛基類的目的是().
A.簡化程序
B.消除二義性
C.提高運行效率
D.減少目標代碼
105.下列虛基類的聲明中()是正確的.
A.class virtualB:publicA
B.classB:virtual publicA
C.virtual classB:publicA
D.classB:publicA virtual
106.類O定義了私有函數F1.P和Q為O類的派生類定義為classP:public){…};classQ:protectedO{…}.則()可以訪問F1.
A.O的對象
B.P類內
C.O類內
D.Q類內
107.派生類采用()繼承方式可以使基類保護成員成為自己的私有成員.
A.私有繼承
B.保護繼承
C.公有繼承
D.私有.保護.公有均可
108.從一個基類派生出的各個類的對象之間().
A.共享所有數據成員每個對象還包含基類的所有屬性
B.共享部分數據成員每個對象還包含基類的所有屬性
C.不共享任何數據成員但每個對象還包含基類的所有屬性
D.共享部分數據成員和函數成員
109.建立包含有類對象成員的派生類對象時自動調用構造函數的執行順序依次為()的構造函數.
A.自己所屬類.對象成員所屬類.基類
B.對象成員所屬類.基類.自己所屬類
C.基類.對象成員所屬類.自己所屬類
D.基類.自己所屬類.對象成員所屬類
110.當派生類中有和基類一樣名字的成員時一般來說().
A.將產生二義性
B.派生類的同名成員將覆蓋基類的成員
C.是不能允許的
D.基類的同名成員將覆蓋派生類的成員
111.下列關于運算符重載的描述中正確的是().
A.運算符重載可以改變操作數的個數
B.運算符重載可以改變優先級
C.運算符重載可以改變結合性
D.運算符重載不可以改變語法結構
112.下列關于模板的描述錯誤的是().
A.模板把數據類型作為一個設計參數
B.模板定義中支持多個參數類型
C.模板定義中只能支持一個參數
D.模板參數列表中可以有類型參數和非類型參數
113.read函數的功能是從輸入流中讀入().
A.一個字符
B.當前字符
C.一行字符
D.指定若干字符
114.要求打開文件”D:\file.dat”并能寫入數據的正確語句是().
A.if streamin file(“D:\file.data”ios::in);
B.if streamin file(“D:\file.data”ios::out);
C.of streamin file(“D:\file.data”ios::out);
D.if streamin file(“D:\file.data”ios::in|ios::out);
115.編譯器將C++源代碼翻譯為().
A.目標文件
B.可執行文件
C.頭文件
D.資源文件
116.C++源程序文件的缺省擴展名為().
A…lib
B…obj
C…exe
D…cpp
117.假定一個二維數組的定義語句為”int a[3][4]={{34}{286}};”則元素a[1][2]的值為().
A.2
B.4
C.6
D.8
118.函數重載是指().
A.兩個或兩個以上的函數取相同的函數名但形參的個數或類型不同
B.兩個以上的函數取相同的名字和具有相同的參數個數但形參的類型可以不同
C.兩個以上的函數名字不同但形參的個數或類型相同
D.兩個以上的函數取相同的函數名并且函數的返回類型相同
119.假定AA為一個類a為該類公有的數據成員x為該類的一個對象則訪問x對象中數據成員a的格式為().
A.x(a)
B.x[a]
C.x->a
D.x.a
120.類的實例化是指().
A.定義類
B.創建類的對象
C.調用類的成員
D.指明具體類
二.問答題
1.寫出下面程序的執行結果.#include using namespace std;int f(int n){if(n<=0) throw n;int s=1;for(int i=1;i<=n;i++) s*=i;return s;}int main(){try{ cout<<“4!=“<<f(4)<<endl; cout<<“-2!=“<<f(-2)<<endl;}catch(int n){ cout<<“n=“<<n<<“不能計算n!”<<endl; cout<<“程序執行結束”<<endl;}return 0;}
4!=24
n=-2不能計算n!
程序執行結束
2.下面程序執行后假定用戶輸入”Every student love C++”寫出程序執行后文件”D:\1.txt”中存儲的內容.#include #include using namespace std;int main(){char buf[100];cin>>buf;ofstream of;of.open(“D:\1.txt”);of<<buf;of.close();return 0;}
very
3.寫出下面程序的執行結果.#include int main(){int number = 267;int digit tens hundreds;digit = number %10;tens = (number/10)%10;hundreds = (number/100)%10;cout<<"Result: “<<hundreds<<” “<<tens<<” "<<digit<<endl;return 0;}
Result: 2 6 7
4.寫出下面程序的執行結果.#include using namespace std;double func( double pData[ ] int size);int main(){ double array[]={2.2 3.8 6 5.4}; cout<<"Result: "<<func(array 4)<<endl; cout<<"Result: "<<func(array 3)<<endl; return 0;}double func( double pData[ ] int size){ double result=0; int i; for(i=0; i<size; ++i) {result+=pData[i]; } result /= size; return result;}
Result: 4.35 Result: 4
5.寫出下面程序的輸出結果.#include using namespace std;class Base {public:void display() {cout<<“Base display”<<endl; } }; class Derived : public Base { public:void display() { cout<<“Derived display”<<endl; }};void display(Base & rr){rr.display();}intmain(){Base b;Derived d;display(b);display(d);return 0;}
ase display Base display
6.寫出程序輸出結果.#include using namespace std;class Base{private:int base;public:Base(int b) {base=b;cout<<“base=“<<b<<endl;}~Base() { }};class Derived : public Base{private:Base bb;int derived;public:Derived(int dintbint c) : bb? Base(b) {derived=d;cout<<“derived=“<<derived<<endl;}~Derived(){}};int main(){Derived d(345);return 0;}
base=4 base=5 derived=3
總結
以上是生活随笔為你收集整理的[渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同花顺选股公式编写教程?
- 下一篇: [渝粤教育] 西南科技大学 数控机床与编