《面向对象程序设计C》期末试卷及标准答案集总解析.pdf
《《面向对象程序设计C》期末试卷及标准答案集总解析.pdf》由会员分享,可在线阅读,更多相关《《面向对象程序设计C》期末试卷及标准答案集总解析.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1页面向对象程序设计C+期末考试试卷( B)班级: _ 姓名: _ 学号: _ 分数: _ 题号- 一一二二二- 三四总分得分试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。(答题纸在本套试卷的第8 页上)一、单项选择题(每小题2 分,共 40 分)1、关于 C+与 C 语言关系的描述中,( D )是错误的。A . C 语言是 C+语言的一个子集B . C 语言与 C+语言是兼容的C. C+语言对 C 语言进行了一些改进D . C+语言和 C 语言都是面向对象的2、 已知: int m=10; 下列表示引用的方法中,(A )是正确的。A . int &x=m; B
2、. int &y=10; C. i nt &z; D. float & t=&m; 3、 考虑下面的函数原型声明:void testDefaulParam (i nt a,i nt b=7,char z=* ); 下面函数调用中,不合法的是(C )。A . testDefaulParam (5); B. testDefaulParam (5,8); C. testDefaulParam (5,#); D. testDefaulParam (0,0,*); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( A )。A . 函数的返回值类型B . 参
3、数的类型C. 函数名称D . 参数个数5、下列有关 C+类的说法中,不正确的是(D )0A . 类是一种用户自定义的数据类型B . 只有类中的成员函数或类的友元函数才能存取类中的私有成员C. 在类中,如果不做特别说明,所有成员的访问权限均为私有的D . 在类中,如果不做特别说明,所有成员的访问权限均为公用的6 已知 X 类,则当程序执行到语句X array3; 时,调用了(D )次构造函数。第 2 页A . 0 B. 1 C. 2 D . 3 7、有关析构函数的说法,不正确的是(A?析构函数有且仅有一个B?析构函数和构造函数一样可以有形参C?析构函数的功能是在系统释放对象之前作一些内存清理工作
4、D?析构函数无任何函数类型8、 类定义的内容允许被其对象无限制地存取的是(C )。A. private 部分 B. protected 部分 C. public 部分 D . 以上都不对9、 关于常数据成员的说法,不正确的是()。A . 常数据成员的定义形式与一般常变量的定义形式相同,只不过常数据成员的定义必须出现在类体中B . 常数据成员必须进行初始化,并且不能被更新C. 常数据成员通过构造函数的成员初始化列表进行初始化D . 常数据成员可以在定义时直接初始化10、运用运算符 delete 删除一个动态对象时()。A . 系统首先为该动态对象调用构造函数,再释放其占用的内存B . 系统首先释
5、放该动态对象占用的内存,再为其调用构造函数C. 系统首先为该动态对象调用析构函数,再释放其占用的内存D . 系统首先释放动态对象占用的内存,再为其调用析构函数11、可以在类外用 p.a 的形式访问派生类对象p 的基类成员 a, 其中 a( D )。A . 私有继承的公用成员B . 公用继承的私有成员C. 公用继承的保护成员D. 公用继承的公用成员12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是() A . 派生类的对象可以赋给基类的对象B . 派生类的对象可以初始化基类的引用C. 派生类的对象可以直接访问基类中的成员D . 派生类的对象的地址可以赋给指向基类的指针B )。
6、第3页13、 设置虚基类的目的是(B )。A . 简化程序B . 消除二义性C.提高运行效率D.减少目标代码14、在 C+中,用于实现动态多态性的是(D )oA . 内联函数B . 重载函数C.模板函数D.虚函数15、不能说明为虚函数的是()。A . 析构函数B . 构造函数C.类的成员函数D.以上都不对16、如果一个类至少有一个纯虚函数,那么就称该类为()。A . 抽象类B . 派生类C.纯基类D.以上都不对17、下面关于友兀的描述中,错误的是()oA ?友元函数可以访问该类的私有数据成员B ?一个类的友元类中的成员函数都是这个类的友元函数C. 友元可以提高程序的运行效率D ?类与类之间的友
7、元关系可以继承18、下列运算符中,()运算符在 C+中不能被重载。A . & B. C. : D . new 19、 模板的使用实际上是将类模板实例化成一个()oA . 函数B . 对象C. 类D . 抽象类20、假定 MyClass 为一个类,贝 U 该类的拷贝构造函数的声明语句为()。A . MyClass (MyClass x )B. MyClass& (MyClass x )C. MyClass (MyClass &x )D. MyClass (MyClass *x )二、填空题(前 16 个空,每空 1 分,后 2 个空,每空 2 分,共 20 分)1、 类和对象的关系可表述为:类是
8、对象的_ ,而对象则是类的_ 。2、 在 C+中,三种继承方式的说明符号为 _ 、 _ 和 _ ,如果不加说明,则默认的继承方式为_ 。3、 如果只想保留公共基类的一个复制,就必须使用关键字_ 把这个公共基类声明为虚基类。第 4 页4、 若要把 void fun ()定义为类 A 的友元函数,则应在类A 的定义中加入语句 _ 。第5页5、类的静态成员分为 _ 和 _ 。6 运算符重载要求保持其原来的操作数个数、_ 、 _ 和语法结构。7、 通过关键字 _ 可以声明模板,通过关键字_ 指定函数模板的类型参数,有几个类型参数就有几个类型关键字。8、 列出 C+中两种用户自定义的数据类型: _ 、
9、_ 。9、 构造函数的作用是_ 。10、 后置自增运算符“ + ”重载为类的成员函数 ( 设类名为 A) 的形式为 _ 。三、阅读下面 3 个程序,写出程序运行时输出的结果:( 共 13 分) 1、 #includeviostream using n amespace std; void fun(int &a,int &b) in t p; p=a; a=b; b=p; void excha nge(i nt &a,i nt &b,i nt &c) if(ab)fu n(a,b); if(ac)fu n( a,c); if(bc)fu n(b,c); int main() int a=12,b
10、=89,c=56; excha nge(a,b,c); coutvva=vvavv,b=vbvv,c=vvcvve ndl; return 0; 2、 #include 第 6 页using namespace std; class Date public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month, day, year; ; Date:Date(int m,int d,int y):month(m),day(d),year(y) Date:Date(int m
11、,int d):month(m),day(d) year=2009; Date:Date(int m):month(m)day=1; year=2010; Date:Date() month=1; day=1; year=2010; void Date:display()coutmonth/day/yearendl; int main() Date d1(12,31,2009); Date d2(12,31); Date d3(1); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; 3、#in
12、clude using namespace std; class A 第 7 页 public: A()coutconstructing A endl; A()coutdestructing A endl; class B: public A public: B()coutconstructing B endl; B()coutdestructing B endl; class C : public B public: C()coutconstructing C endl; C()coutdestructing C endl; int main() C c1; return 0; 四、编程题
13、(共 27 分) 1、(10 分) 已知复数类 Complex 的声明如下:class Complex public: Complex(); /无参构造函数Complex(double ); /转换构造函数Complex(double, double);/有两个形参的构造函数friend Complex operator+(Complex&, Complex&); / 对 “+” 运 算 符 进 行 重 载friend ostream& operator(ostream&, Complex&); /对“(istream&, Complex&); /对“ ”运算符进行重载private: dou
14、ble real,imag; ; 要求:( 1)写出该类的所有构造函数的类外定义代码。第 8 页( 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; iarea ( ); return sum; 要求: (
15、1) 从 Shape 类派生圆类(Circle) 、 正方形类(Square , 圆类新增数据成员半径 (radius ) ,正方形类新增数据成员边长 (a),圆类和正方形类都有构造函数,修 改、显示数据成员值的函数,求面积函数。(2)写出 main()函数,计算半径为5.5 的圆和边长为 9.9 的正方形的面积和(必须通过调用 totaI 函数计算)。第 8 页面向对象程序设计C+期末考试试卷( B )标准答案班级: _ 姓名: _ 学号: _ 分数: _ 题号一一一- 二二- 三四总分得分、单项选择题(每小题2 分,共 40 分)1-5. D A C A D 6-10. D B C D C
16、 11-15. D C B D B 16-20. A D C C C 二、填空题 (前 16 个空,每空 1 分,后 2 个空,每空 2 分,共 20 分) 1. _ 抽象 _ 、 _ 实例_ 2. public _ 、 private _ _ 、 protected 、 private _ _ 3. _ virtual _ 4. friend void fun(A &a) _ 5. 静态数据成员、 静态成员函数6. 结合性 、 优先级 _ 7. Template 、class( 或 type name) 8. _ 类_ 、 结构体9. 在创建对象时初始化对象的数据成员_10. _ Aoper
17、ator+(int) _ _ 三、阅读程序 (共 13 分) 1、a=89,b=56,c=12 2 、12/31/2009 12/31/2009 1/1/2010 1/1/2010 3、constructing A 第 10 页constructing B constructing C destructing C destructing B destructing A 四、编程题 (共 27 分) 1、(10 分) Complex:Complex()real=0;imag=0; Complex:Complex(double r)real=r; Complex:Complex(double r,
18、double i)real=r;imag=i; Complex operator+(Complex &c1,Complex &c2) Complex c; c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag; return c; ostream& operator (ostream& output,Complex& c) output(c.real+c.imagi) (istream& input,Complex& c) coutc.realc.imag; return input; 2、(17 分)class Circle:public Shape
19、public: Circle(double r)radius=r; void set() coutPlease input the value of the circle:radius; void show() coutthe radius of the circle=radiusa=a; void set() coutPlease input the value of a:a; void show() couta=aendl; double area()return a*a; private: double a; ; int main() Circle C(5.5); C.show(); S
20、quare S(9.9); S.show(); Shape *s=&C,&S; couttotal=total(s,2)endl; return 0; 第 12 页面向对象程序设计C+期末考试试卷一、选择题(每小题3 分,共 48 分。 )01、下列关于 C+函数的叙述中,正确的是( C )。A) 每个函数至少要具有一个参数B) 每个函数都必须返回一个值C)函数在被调用之前必须先声明D)函数不能自己调用自己02、下列关于类和对象的叙述中,错误的是( A ) 。A) 一个类只能有一个对象B) 对象是类的具体实例C) 类是对某一类对象的抽象D) 类和对象的关系是一种数据类型与变量的关系03、在 C
21、+中, 用于实现运行时多态性的是(D )。A)内联函数B) 重载函数C) 模板函数D)虚函数04、下列关于运算符重载的叙述中,正确的是(B ) 。A) 通过运算符重载,可以定义新的运算符B) 有的运算符只能作为成员函数重载C) 若重载运算符+,则相应的运算符函数名是+ D) 重载二元运算符时,必须声明两个形参05 、对于语句coutxendl; 错误的是描述是(D ) 。 A)“cout ”是一个输出流对象B)“endl ”的作用是输出回车换行C) “x”是一个变量D) “ VV”称作提取运算符06、有如下类声明,则类MyDERIVED 保护的数据成员和成员函数的个数是( ) 。class M
22、yBASE private: int k; public: void set(int n) k=n; int get( )const return k; ; class MyDERIVED: protected MyBASE protected: int j; 第 13 页public: void set(int m, int n) MyBASE:set(m); j=n; int get( ) const return MyBASE:get( )+j; ; A)4 B)3 C)2 D)1 07、已知在一个类体中包含如下函数原型: Volumeoperator-(Volume)const; ,下
23、列关于这个函数的叙述中,错误的是( B ) 。A)这是运算符 -的重载运算符函数B)这个函数所重载的运算符是一个一元运算符C) 这是一个成员函数的任何数据成员的值08、执行如下的程序段后,输出结果是cout.fill(*); cout.width(6); cout.fill(#); cout 123 endl; A)#123 B)123# C)*123 D)123* 09、在下列函数原型中,可以作为类AA 构造函数的是(B )A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int); 10、 下面四个选项中,(A) 是用来声明虚函数的。A)vi
24、rtual B)public C)include D)using namespace 11、 实现运行时的多态性要使用(D )。A)重载函数B)构造函数C)析构函数D)虚函数12、 要实现动态联编,必须通过()调用虚函数。A)对象指针B)成员名限定C)对象名D)派生类名13、 以下(C ) 成员函数表示纯虚函数。A)virtual int vf(int); B)void vf(int)=0; C)virtual void vf()=0; D)virtual void vf(int) 14、 有如下类声明: class XA private: int x; public: XA(int n) x
25、=n; ; class XB: public XA D)这个函数不改变类第14页 private: int y; public: XB(int a,int b); ; 在构造函数 XB 的下列定义中,正确的是()。A)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) D)XB:XB(int a,int b): XA(a),XB(b) 15、在表达式 x+y*z 中,+是作为成员函数重载的运算符,是作为非成员函数重载的运算符。则operator* 有 _
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计C 面向 对象 程序设计 期末试卷 标准答案 解析
限制150内