面向对象程序设计-试卷试题-A(附答案)_第1页
面向对象程序设计-试卷试题-A(附答案)_第2页
面向对象程序设计-试卷试题-A(附答案)_第3页
面向对象程序设计-试卷试题-A(附答案)_第4页
面向对象程序设计-试卷试题-A(附答案)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、姓名: 学号: 系别: 年级专业: 密封线线_ _ 东莞理工学院(本科)试卷(A卷)2012 -2013学年第二学期面向对象程序设计试卷开课单位: 计算机学院,考试形式:闭卷,允许带 入场题序一二三四五六总 分得分评卷人 一单项选择题 (15小题,每小题2分,共30分,请将正确答案填写在以下对应的答题表格中)题号12345678910答案题号1112131415答案1、在类定义的外部,可以被访问的成员有( )A、所有类成员 B、private的类成员C、public或private的类成员 D、public的类成员 2、下列关于C+语言类的描述中错误的是( ) 。 A 、类用于描述事物的属性和

2、对事物的操作 B、 类与类之间通过封装而具有明确的独立性 C、 类与类之间必须是平等的关系,而不能组成层次结构 D、 类与类之间可以通过一些方法进行通信和联络3、下列数组定义中,不正确的是( )。 A、 int x13; B、 int x22=1,2,3; C、 int x2=1,2,3,4 ; D、 int x2=1,2,3,4 4、定义析构函数时,应该注意:( )A、其名与类名完全相同 B、返回类型是void类型C、无形参,也不可重载 D、函数体中必须有delete语句5、下列函数中,正确的递归函数是( )。 A 、int Fun(int n) if(n<1) return 1; e

3、lse return n*Fun(n+1); B 、int Fun(int n) if (abs(n)<1) return 1; else return n*Fun(n/2); C 、int Fun(int n) if(n>1) return 1; else return n*Fun(n*2); D、 int Fun(int n) if(n>1) return 1; else return n*Fun(n-1); 6、在C+中编译器所生成的文件的扩展名为( )答案修改过A、 .cpp B、 .obj C、 .lib D、 .exe7、派生类的对象对它的基类成员中的( )是可以

4、访问A、公有继承的公有成员  B、公有继承的私有成员 C、公有继承的保护成员D、私有继承的公有成员8. C+设置虚基类的目的是( )A、消除二义性 B、简化程序 C、提高运行效率 D、减少目标代码9. 以下关于this指针的叙述中正确的是:( )A、任何与类相关的函数都有this指针; B、类的成员函数都有this指针;C、类的友员函数都有this指针; D、类的非静态成员函数才有this指针;10实现运行时的多态性采用( )A、重载函数 B、构造函数 C、析构函数 D、虚函数11、若有int a10=0,1,2,3,4,5,6,7,8,9,*p=&am

5、p;a5;则(      ) 不是对a数组元素的正确引用(其中0i<10)A、pi B、 *(*(p+i) ) C、ap-a D、* (&ai)12、int Func(int,int);不可与下列哪个函数构成重载( )A、int Func(int,int,int); B、double Func(int,int);C、double Func(double,double); D、double Func(int,double);13、局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用( )提供对全局变量的

6、访问。 【内层隐藏外层】 A 、域运算符 B、指针 C、重载 D、引用 14下列描述中,正确的是:( ) A、所有的运算符号都可以重载。 B、基类类型的指针可以指向子类,子类类型的指针也可以指向基类。【只有public继承前一个说法才成立】姓名: 学号: 系别: 年级专业: 密封线线 C、可以在类体内对静态数据成员进行初始化。【必须类外初始化】 D、动态联编要满足两个条件:被调用的成员函数是虚函数;用指针或引用调用虚函数。15、下面类的定义,有( )处错误。 class MyClass private: int i=0; 2 public: void MyClass(); 3 MyClass(

7、int Value); 4 1A、 1 B、 2 C 、3 D、 4二填空题(每题2分,共20分)1、static加在局部变量定义前,改变局部变量的生存期但不改变它 作用域 的。2. 类的私有成员只能被它的成员函数和 友元 函数访问。3. 一个抽象类的派生类可以实例化的必要条件是实现了所有的 纯虚函数 。4、假定AB为一个类,有类AB的两个对象a1,a2;则执行语句AB *a10=&a1,&a2;时系统自动调用该类的构造函数的次数为 0 。5、通过C+语言中类的 继承和派生 机制,可以扩充和完善已有类以适应新的需求。【答案修改过】6. 若在类的定义体中给出了一个成员函数的完整定

8、义,则该函数属于 内联函数 。7. 不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为 多态 。8. 对象的核心概念就是通常所说的 继承 、 封装 和多态性 。9. 在一个类中可以定义 1 个析构函数。10、若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上 const 关键字。 三判断题,对的打T错的打F。(5小题,每小题2分,共10分)1. 函数形参的作用域是该函数的函数体。( )2. 纯虚函数必须在抽象类中,所以抽象类中的成员函数必须是纯虚函数。(× )3. 派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问。( )

9、答案修改过4. 可以在类的构造函数中对静态数据成员进行初始化。(× )5. 构造函数和析构函数都可以定义为虚函数。(×)。 四程序填空(每题6分,共18分)根据程序的功能描述,将程序下划线空白处内容补充完整(每空白3分)1. 阅读下面是一段关于类的派生的程序,请完成填空。/Point.h#ifndef _POINT_H#define _POINT_Hclass Point public:void initPoint(float x = 0, float y = 0) this->x = x; this->y = y;void move(float offX, f

10、loat offY) x += offX; y += offY; float getX() const return x; float getY() const return y; private:float x, y;#endif /_POINT_H/Rectangle.h#ifndef _RECTANGLE_H#define _RECTANGLE_H#include "Point.h"class Rectangle: private Point public:void initRectangle(float x, float y, float w, float h) t

11、his->x = x;this->y= y; 姓名: 学号: 系别: 年级专业: 密封线线this->w = w;this->h = h;void move(float offX, float offY) Point:move(offX,offY);float getH() const return h; float getW() const return w; private:float w, h;#endif /_RECTANGLE_H#include <iostream>#include <cmath>using namespace std

12、;int main() Rectangle rect;rect.initRectangle(2, 3, 20, 10);rect.move(3,2); cout << "The data of rect(x,y,w,h): " << endl;<< rect.getW() << ", "<< rect.getH() << endl;return 0;2. 以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。 class counter private: int n

13、; public: counter() n=0; counter(int i)n=i; counter operator +(counter &c) /运算符重载函数 counter t; t.n=n+c.n; return t; void disp() cout<<"n="<<n<<endl; ; void main() counter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp();3.下面是动态创建一个8x9x8的三维数组的一段程序,请按提示完成填空。#i

14、nclude <iostream>using namespace std;int main() float *cp=new float*8;/创建符合题目要求的指针并初始化 for(int k=0;k<8;k+) cpk=new float *9;for(int m=0;m<8;m+)for(int n=0;n<9;n+) cpmn=new float 8; float (*cp)98 = new float898 ;/两种方法都可以,具体看填空的地方有多大 for (int i = 0; i < 8; i+) for (int j = 0; j <

15、9; j+) for (int k = 0; k < 8; k+) *(*(*(cp + i) + j) + k) =static_cast<float>(i * 100 + j * 10 + k); for ( i = 0; i < 8; i+) for (int j = 0; j < 9; j+) for (int k = 0; k < 8; k+)cout << cpijk << " "cout << endl;cout << endl;delete cp ;/释放指针指向的空间ret

16、urn 0;五、程序执行(每题5分,共10分)阅读下面的程序,并分别写出程序执行的完整输出结果。1. 程序1#include <iostream> using namespace std; class base public: static int n; base(int x) n=x; virtual void set(int m) n = m; cout << n <<' ' ; int base:n=0; class deriveA:public base public: deriveA(int x):base(x) void set(

17、int m) n += m; cout << n <<' ' ; class deriveB:public base 姓名: 学号: 系别: 年级专业: 密封线线 public: deriveB(int x):base(x) void set(int m) n +=m; cout <<n << ' ' ; int main() deriveA dl(0); deriveB d2(1); base *pbase; pbase = &dl; pbase->set(1); pbase->base:se

18、t(0); pbase = &d2; pbase->set(1); pbase->base:set(3);cout<<endl;return 0;输出结果:2 0 1 32. 程序2#include <iostream>using namespace std;class Base1 public:int i;Base1(int x) i=x;cout << "Constructing Base1 " << i << endl; ;class Base2: public Base1 public:

19、Base2(int j): Base1(j) cout << "Constructing Base2 " << j << endl; ;class Base3 public:Base3() cout << "Constructing Base3 *" << endl; ;class Derived: public Base2, public Base3 public:int h;Derived(int a, int b, int c, int d): member2(d), member1(c)

20、, Base2(b)h=a; private: Base1 member1;Base2 member2;Base3 member3;int main() Derived obj(1, 2, 3, 4);return 0;输出结果:Constructing Base1 2Constructing Base2 2Constructing Base3 *Constructing Base1 3Constructing Base1 4Constructing Base2 4Constructing Base3 *六、程序设计(12分)定义一个抽象类Stereo,函数Volume为纯虚函数,用来计算体积

21、。由抽象类分别派生出立方体Cube类、球体Sphere类、圆柱体Cylinder类,并求其体积(其中球体的体积公式为 V=4/3*PI*R*R*R)。各立体形状的相关数据成员(其中:r代表半径,l代表长度,w代表宽度,h代表高度)属性都为private,并且通过各类的构造函数设置。total是一个通用的,用以求不同立体形状的体积总和的全局函数。1)定义和实现各个类,给出相关的成员数据、构造函数和必要的成员函数即可。(4分,每个类1分)2)定义和实现total函数,注意该函数为全局函数不是某各类的成员函数。 (4分)3)编写main函数进行测试,功能要求如下:a、用基类指针数组,使它的每一个元素指向一个派生类的对象,并且所有形状立方体对象都进行内存动态分配和回收(即用new和delete操作符);b、主函数内调用total输出所有形状立方体的体积之和。(4分)注:主函数中用到的构造函数和total函数如下 Cube(5.0,5.0,8.0); /实参为立方体的长、宽、高。 Sphere(6.0); /实参为球体的半径。 Cylinder(5.0,8.0); /实参为圆柱体的底面半径、高。 total(s,3);/ 实参s为基类指针数组,3为数组的大小。#include<iostream>using namespace std;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论