《面对对象程序设计C++ 》期末考试试卷 B() 班级 :姓名 :学号 :分数 :题号—二三四总分得分 试卷说:本套试题共四个大题,全部题 目都答在答题纸上,写在其他地方均无效。答(题纸在本套试卷的第8页上) 一、单项选择题 每(小题2分,共40分 ) 1、关于C++与C语言关系的描述中,(D)是错误的。A. C语言是C++语言的一个子集B. C语言与C++语言是兼容的C. C++语言对C语言进行了一些改进 D.C++语言和C语言都是面对对象的 2 、已知:in tm = 10 ;下列表示引用的方法中WhatsApp网页版, (A)是正确的。A. int x=m; B. int y=10;C. int z;D. float t=m; 3 、考虑下面的函数原型声:void testDefaulParam in(t a int b=7 char z=*); 下面函数调用中,不合法 的是 (C)o A. testDefaulParam 5();B. testDefaulParam 5(8); C. testDefaulParam 5( D. testDefaulParam 0(0 *); 4 、系统在调用重载函数时往往依据一些条件确定哪个重载函数被调用,在下列选 项中,不能作为依据的是 (A)0 A . 函数的返回值类型B . 参数的类型C . 函数名称D . 参数个数 5 、下列有关C++类的说法中,不正确 的是 (D)。A . 类是一种用户自定义的数据类型B . 只有类中的成员函数或类的友元函数才能存取类中的私有成员C . 在类中,假如不做特殊说,全部成员的访问权限均为私有的D . 在类中,假如不做特殊说,全部成员的访问权限均为公用的 6 、已知X类,则当程序执行到语句X array
;时,调 用 了 (D)次构造函数。 A. 0B. 1C. 2D. 3 7 、有关析构函数的说法,不正确 的是 (B)。 A . 析构函数有且仅有一个 B . 析构函数和构造函数一样可以有形参 C . 析构函数的功能是在系统释放对象之前作一些内存清理工作 D . 析构函数无任何函数类型 8 、类定义的内容允许被其对象无限制地存取的是 ( C)。 A. p r iv at e 部分 B. protected部分 C. p u b lic 部分 D . 以上都不对 9 、关于常数据成员的说法,不正确 的是 ()。 A . 常数据成员的定义形式与一般常变量的定义形式相同,只不过常数据成员的 定义必需出现在类体中 B . 常数据成员必需进行初始化,并且不能被更新 C . 常数据成员通过构造函数的成员初始化列表进行初始化 D . 常数据成员可以在定义时干脆初始化 10、运用运算符delete删除一个动态对象时 ()。 A . 系统首先为该动态对象调用构造函数,再释放其占用的内存 B . 系统首先释放该动态对象占用的内存,再为其调用构造函数 C . 系统首先为该动态对象调用析构函数,再释放其占用的内存 D . 系统首先释放动态对象占用的内存,再为其调用析构函数 11、可以在类外用p .a 的形式访问派生类对象p 的基类成员a其中a是(D )。 A . 私有继承的公用成员B . 公用继承的私有成员 C . 公用继承的爱护成员D . 公用继承的公用成员 12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是 ( )。 A . 派生类的对象可以赋给基类的对象 B . 派生类的对象可以初始化基类的引用 C . 派生类的对象可以干脆访问基类中的成员 D . 派生类的对象的地址可以赋给指向基类的指针 13、设置虚基类的目的是 (B)。 A . 简化程序B . 消退二义性C. 提高运行效率D. 削减目标代码D )。 14 、在C++ 中,用于实现动态多态性的是 ( A . 内联函数B . 重载函数C. 模板函数D. 虚函数 15、不能说为虚函数的是 ()。 A . 析构函数B . 构造函数C. 类的成员函数D. 以上都不对 16、假如一个类至少有一个纯虚函数, 那么就称该类为 ()o A . 抽象类B . 派生类C . 纯基类D . 以上都不对 17、下面关于元的描述中,错误 的是 ( A . 元函数可以访问该类的私有数据成员 B. 一个类的 元类中的成员函数都是这个类的 元函数 C . 元可以提高程序的运行效率 D . 类与类之间的 元关系可以继承 18、下列运算符中, ()运算符在C++ 中不能被重载。 A.B.
C. ::D. new 19、模板的运用事实上是将类模板实例化成一个 ()o A . 函数B . 对象C . 类D . 抽象类 20 、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为 ()。 A. MyClass M(yClass x)B. MyClass M(yClass x) C. MyClass M(yClass x)D. MyClass M(yClass *x) 二、填 空题 前(16个空,每空1分,后2个空WhatsApp网页版,每空2分,共20分 ) 1、类和对象的关系可表述为:类 是 对 象 的 ,而对象则是类的O 2 、在C++ 中,三种继承 方 式 的 说 明 符 号 为 、和, 假如不加说明,则默认的继承方式为o 3 、假如只想保留公共基类的一个复制,就必需运用关键字把这个公共基 类声明为虚基类。 4 、若要把voidfun )(定义为类A 的元 函数 ,则应在类A 的定义 中加入语 句o 5 、类的静态成员分为和。 6 、运算符重载要求保持其原来的操作数个数、、和语 法结构。 7 、通过关键字可以声明模板,通过关键字指定函数模板的 类型参数,有几个类型参数就有几个类型关键字。 8 、列出C++ 中两种用户自定义的数据类型:、。 9 、构造函数的作用是o 10、后置 自增运算符 “++ ”重载为类的成员函数 (设类名为A ) 的形式为。 三、阅读下面3个程序,写出程序运行时输出的结果:(共13分) 1、#includeiostreamusing 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(ab)fun(a b);if(ac)fun(a c);if(bc)fun(b c);)int main(){ int a= 12 b=89 c=56;exchange(a b c);c o u t « a= « a « n b = « b « c= « c « e n d l ;return 0; 2 、#include iostreamusing namespace std;class Date{public:Date(int int int);Date(int int);Date(int);Date();void displayO;private:int month day year;);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=l;day=l;year=2010; }void D ate ::disp lay () {cout«m onth« 7 « d a y « 7 «y e ar « en d l ;}int main(){ Date d l( 12 31 2009);Date d2( 12 31) ;Date d3(l);Date d4;dl.display();d2.display();d3.display ();d4.display();return 0;} 3 、#include iostreamusing namespace std;class A{ public:nuA() {c o u t « constructing A « en dl ;}n- A() {cout«destructing A « en dl;}};class B: public A{ public:nnB() {c o u t « constructing B « en dl ;}- B() {cout«destructing B n « en dl;}};class C : public B{ public:nHC() {c o u t « constructing C « en dl ;}- C() {c o u t « ndestructing C n « en d l ; } };int main(){ C e l ;return 0;) 四、编程题 (共27分) 1、(10分) 已知复数类Complex 的声明如下: class Complex {public:Complex();〃无参构造函数Complex(double );//转换构造函数Complex(double double);//有两个形参的构造函数friend Complex operator+(Complex Complex);〃 对 ” 运算符进行重载friend ostream operator«(ostream Complex);〃对 “vv ” 运算符进行重载friend istream operator»(istream Complex);〃对运算符进行重载 private:double reaLimag; 要求: (1)写出该类的全部构造函数的类外定义代码。2()写出对运算符 “+ ”、 “、 “ ”进行重载的运算符重载函数的定义。 2 、 (17分 )下列Shape类是一个表示形态的抽象类,area()为求图形面积的函数,total() 则是一个通用的用以求不同形态的图形面积总和的函数。 class Shape {public:virtual double area()=0; double total(Shape *s
int n)double sum=0.0;for(int i=0; in; i++) sum+=s
-area();return sum; 要求: (1)从 Shap e类派生圆类 C(ircle)、正方形类 S(quare) 圆类新增数据成员半 径 r(adius) 正方形类新增数据成员边长 a() 圆类和正方形类都有构造函数,修 改、显示数据成员值的函数,求面积函数。2()写出main 。函数,计算半径为5.5 的圆和边长为9.9 的正方形的面积和 (必 需通过调用total 函数计算)。面《对对象程序设计C++ 》期末考试试卷 B()标准答案 班级:姓名:学号:分数:—三二题号四总分得分 一、单项选择题 每(小题2 分,共 40分 )1-5. D A C A D6-10. D B C D C 11-15. D C B D B16-20. A D C C C 二、填 空题 (前 16个空,每 空 1分,后 2 个空,每空2 分,共 20分) 1.W、 2.p u b l i c 、 p r i v a t e 、 protected 、 private 3.v i r t u a l4 .friend void fun(A a) 5. 静 态 数 据 成 员 、 静态成员函数6.结合性、优先级 7. Template 、 c la s s (或 lypename) 8. ______ 类_____ 、 结构体 9. 在创建对象时初始化对象的数据成员_________________________________ 10.A op er ator+ + (in t)____________________________________________ 三、阅读程序 (共 13分) 1、a=89 b=56 c= 12 2 、12/31/200912/31/20091/ 1/20101/ 1/2010 3 、constructing Aconstructing Bconstructing Cdestructing Cdestructing Bdestructing A 四、编程题 (共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 cl Complex c2) { Complex c;c.real=cl.real+c2.real; c.imag=cl.imag+c2.imag;return c; } ostream operator «(ostream output Complex c)*1| { ou tp u t« ( « c .r e a l « 4- « c .im a g « i) « en d l ;return output; ) istream operator »(istream input Complex c)1 { cout« input real and imaginary part of complex number : ;input»c .real»c .im ag ;return input; 2 、 (17 分)class Circle:public Shape{public:Circle(double r) {radius=r;}void set(){ cout« Please input the value of the circle :«endl;cin »radiu s;)void show(){ cou t« th e radius of the circle= «radiu s«en dl;double area() {return 3.14 159*radius*radius;}private:double radius;);class Square:public Shape{public:Square(double a) {this-a=a;}void set(){ cout« Please input the value of a :«en dl;c in » a ;}void show()M{ c o u t « a = « a « en d l ; }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};c o u t « total= «total(s 2 )« en d l ;return 0;《面对对象程序设计C++》期末考试试卷一、选择题 每(小题3 分,共 4 8 分。) 01、下列关于C++函数的叙述中,正确的是 ( C )。A)每个函数至少要具有一个参数 B )每个函数都必需返回 一个值0 函数在被调用之前必需先声明D)函数不能自己调用自 己 02、下列关于类对象的叙述中,错误的是 (A)。A ) 一个类只能有一个对象B)对象是类的详细实例C)类是对某一类对象的抽象D)类 对象的关系是一 种数据类型与变量的关系 03、在 C++中,用于实现运行时多态性的是 D( )oA)内联函数B)重载函数C)模板函数D)虚函 数 04、下列关于运算符重载的叙述中,正确的是 B()。A)通过运算符重载,可以定义新的运算符B)有的运算 符只能作为成员函数重载C)若重载运算符+ , 则相应的运算符函数名是+ D)重载二元 运算符时,必需声明两个形参 05、对于语句coutx e〈ndl;错误的是描述是 (D)。A) “cout”是一个输出流对象B) “endl”的作用是输 出回车换行0 “x ”是一个变量D)称作提取运算 符 06、有如下类声明WhatsApp网页版,则类MyDERIVED中爱护的数据成员 成员 函数的个数是 ()oclass MyBASE{private :int k ;public :void set(int n) { k=n;}int get ( )const { return k ;}) ;class MyDERIVED: protected MyBASE{ protected : int j ;public:void set (int m, int n) { MyBASE ::set(m) ; j=n;}int get ( ) const { return MyBASE ::get ( )+j; }} ;A) 4B)3C)2D)1 07、已知在一个类体中包含如下函数原型:Volume operator- (Volume) const;, 下列关于这个函数的叙述中,错 误的是 (B)oA)这是运算符-的重载运算符函数 B)这个函数所重载的 运算符是一个一元运算符0 这是一个成员函数D)这个函数不变更类 的任何数据成员的值 08、执行如下的程序段后,输出结果是 (C)o5cout. fill (*) ; cout. w idth (6) ; cout. fill (; cout « 123 « endl;A)###123 B)123##tt C)***l23 D)123*** 09 、在下列函数原型中,可以作为类A A 构造函数的是(B)0A) oid AA (int) ;B) int AA () ;C) AA (int) const ; D)AA (int) ; 10、下面四个选项中, (A)是用来声明虚函数的。A) irtual B)public C)include D)using namespace 11、实现运行时的多态性要运用 (D)oA)重载函数B)构造函数C)析构函数D)虚函数 12、要实现动态联编,必 需通 过 ()调用虚函数。A)对象指针B)成员名限定C)对象名D)派生类 名 13、以下( C )成员函数表示纯虚函数。A) irtual int f (int) ;B) oid f (int)=0 ;C) irtual oid f ()=0;D) irtual oid f (int) {} 14、有如下类声明:class XA{ pri ate : int x ;pub lic : XA (int n ) { x=n ;}};class XB : public XA{ pri ate : int y ;pub lic : XB (int a, int b) ; } ;在构造函数X B 的下列定义中,正 确 的是 ()oA)XB : :XB (int a, int b) : x (a), y (b) { } B) XB: :XB (int a, int b) : XA (a), y (b) { )C)XB : :XB (int a, int b) : x (a), XB (b) { }