《面向对象程序设计-试卷-A(共10页).doc》由会员分享,可在线阅读,更多相关《面向对象程序设计-试卷-A(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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(n1) re
3、turn 1; else return n*Fun(n+1); B 、int Fun(int n) if (abs(n)1) return 1; else return n*Fun(n*2); D、 int Fun(int n) if(n1) return 1; else return n*Fun(n-1); 6、在C+中编译器所生成的文件的扩展名为( )答案修改过A、 .cpp B、 .obj C、 .lib D、 .exe7、派生类的对象对它的基类成员中的( )是可以访问A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员8. C+设置虚基类的目的是(
4、)A、消除二义性 B、简化程序 C、提高运行效率 D、减少目标代码9. 以下关于this指针的叙述中正确的是:( )A、任何与类相关的函数都有this指针; B、类的成员函数都有this指针;C、类的友员函数都有this指针; D、类的非静态成员函数才有this指针;10实现运行时的多态性采用( )A、重载函数 B、构造函数 C、析构函数 D、虚函数11、若有inta10=0,1,2,3,4,5,6,7,8,9,*p=&a5;则() 不是对a数组元素的正确引用(其中0ix = x; this-y = y;void move(float offX, float offY) x += offX;
5、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.hclass Rectangle: private Point public:void initRectangle(float x, float y, float w, float h) this-x = x;this-y= y; 姓名: 学号: 系别: 年
6、级专业: 密封线线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 #include using namespace std;int main() Rectangle rect;rect.initRectangle(2, 3, 20, 10);rect.move(3,2); cou
7、t The data of rect(x,y,w,h): endl; rect.getW() , rect.getH() endl;return 0;2. 以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。 class counter private: int n; public: counter() n=0; counter(int i)n=i; counter operator +(counter &c) /运算符重载函数 counter t; t.n=n+c.n; return t; void disp() coutn=nendl; ; void main() co
8、unter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp();3.下面是动态创建一个8x9x8的三维数组的一段程序,请按提示完成填空。#include using namespace std;int main() float *cp=new float*8;/创建符合题目要求的指针并初始化 for(int k=0;k8;k+) cpk=new float *9;for(int m=0;m8;m+)for(int n=0;n9;n+) cpmn=new float 8; float (*cp)98 = new float898
9、;/两种方法都可以,具体看填空的地方有多大 for (int i = 0; i 8; i+) for (int j = 0; j 9; j+) for (int k = 0; k 8; k+) *(*(*(cp + i) + j) + k) =static_cast(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 ;/释放指针指向的空间return 0;五、程序执行(每题5
10、分,共10分)阅读下面的程序,并分别写出程序执行的完整输出结果。1. 程序1#include 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(int m) n += m; cout n ; ; class deriveB:public base 姓名: 学号:
11、系别: 年级专业: 密封线线 public: deriveB(int x):base(x) void set(int m) n +=m; cout n set(1); pbase-base:set(0); pbase = &d2; pbase-set(1); pbase-base:set(3);coutendl;return 0;输出结果:2 0 1 32. 程序2#include using namespace std;class Base1 public:int i;Base1(int x) i=x;cout Constructing Base1 i endl; ;class Base2:
12、 public Base1 public: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), Base2(b)h=a; private: Base1 member1;Base2 membe
13、r2;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为纯虚函数,用来计算体积。由抽象类分别派生出立方体Cube类、球体Sphere类、圆柱体Cylinder类,并求其体积(其
14、中球体的体积公式为 V=4/3*PI*R*R*R)。各立体形状的相关数据成员(其中:r代表半径,l代表长度,w代表宽度,h代表高度)属性都为private,并且通过各类的构造函数设置。total是一个通用的,用以求不同立体形状的体积总和的全局函数。1)定义和实现各个类,给出相关的成员数据、构造函数和必要的成员函数即可。(4分,每个类1分)2)定义和实现total函数,注意该函数为全局函数不是某各类的成员函数。 (4分)3)编写main函数进行测试,功能要求如下:a、用基类指针数组,使它的每一个元素指向一个派生类的对象,并且所有形状立方体对象都进行内存动态分配和回收(即用new和delete操作
15、符);b、主函数内调用total输出所有形状立方体的体积之和。(4分)注:主函数中用到的构造函数和total函数如下 Cube(5.0,5.0,8.0); /实参为立方体的长、宽、高。 Sphere(6.0); /实参为球体的半径。 Cylinder(5.0,8.0); /实参为圆柱体的底面半径、高。 total(s,3);/ 实参s为基类指针数组,3为数组的大小。#includeusing namespace std;class Stereo public: virtual float Volume(void)=0;class Cube:public Stereopublic: Cube(
16、float l=1,float w=1,float h=1 ):l(l),w(w),h(h) float Volume(void) return l*w*h; private: float l,w,h;class Sphere:public Stereopublic: Sphere( float r=1 ):r(r) float Volume(void) return 4/3*3.14*r*r*r; private: float r;class Cylinder:public Stereopublic: Cylinder( float r=1, float h=1 ):r(r),h(h) float Volume(void) return 3.14*r*r*h; private: float r,h;void total( Stereo *p ,int n ) float V; for( int i=0; iVolume(); cout 所有形状立方体的体积之和为: V endl;int main() Stereo *s3; s0 = new Cube(5.0,5.0,8.0); s1 = new Sphere(6.0); s2 = new Cylinder(5.0,8.0); total(s,3); delete s; return 0;专心-专注-专业