(完整word版)2015-2016年度面向对象程序设计试卷_第1页
(完整word版)2015-2016年度面向对象程序设计试卷_第2页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

1、1 / 8 华中科技大学研究生课程考试试卷 学生类别 _ 试日期2 20 1 60 1 6 年_月 1 1 2 2日 院系 _ 学号 _ 姓名 _ 课教师 杨卫东、左峥嵘 _ 一、填空(共 15 分,每空 1 分) 1、 静态多态性是通过 函数重载、运算符重载、模板 来实现。 2、 面向对象的四个基本特性是 抽象、多态、继承 和 封装。 3、 假定 AB 为一个类,则执行“ ABa(10),b1,*p10; ”语句时调用该类构造函 数的次数为 2 。 4、 C+类成员函数有 public 、private 、protected 三种类型。 5、 如果将一个对象说明为常对象,则通过该对象只能调用

2、它的 常成员 函数。 &为使外部函数可访问类的私有成员,需将该函数声明为该类的 友元函数 。 7、 类 B 是由类 A 以保护方式派生的,则类 A 中公有访问属性的数据成员在类 B 中的 访问属性为保护 。 8、 +、=、-等四种运算符中,可采用友元函数重载的运算符是 _+ _ 。 9、 抽象类是指具有 纯虚函数 的类,它只能作为 基类 来使用。课程名称: 面向对象程序设计 公共课 ,开卷 专业课 考亥形式闭卷 课程类别 2 / 8 二、简答题(共 30 分,每小题 6 分,其中 4、5 题任选其一作答即可) 1什么是类模板,类模板声明的一般形式是什么? 答案: 类模板是对一批仅仅成员

3、数据类型不同的类的抽象,程序员只要为这一批类所组成 的整个类家族创建一个类模板, 给出一套程序代码, 就可以用来生成多种具体的类, (这类可以看作是类模板的实例) ,从而大大提高编程的效率。 定义类模板的一般形式是: template class 类名 类声明体 ; 2什么是 this 指针 ? 它的主要作用是什么? 答案: this 指针:隐含在非静态成员函数中的特殊指针,它是当前正在调用此成员函数的 对象的指针。 作用:主要是用于保证访问不能跨界和用于区分不同的对象。成员函数对成员变量 的引用实际是通过 this 指针访问的,也就是说:成员变量 this- 成员变量;另外, 如果成员函数需

4、要访问当前对象,也可以通过 this 指针, *this 就是当前对象。 3什么是多继承?多继承时,构造函数和析构函数执行顺序是怎样的? 答案: 多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单 继承。 派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时 指定的各基类顺序) ,再执行派生类的构造函数,析构函数执行顺序,与构造函数完 全相反。 4写出下面程序的运行结果 答案: constructor B2.2 constructor B1.1 constructor B3.3 constructor A.4 1 2 4,3 #include usin

5、g namespace std; class B1 int b1; public: B1(int i) 3 / 8 b1 = i; cout constructor B1.iendl; void print() coutb1endl; ; class B2 int b2; public: B2(int i) b2 = i; coutconstructor B2.iendl; void print() coutb2endl; ; class B3 int b3; public: B3(int i) b3 = i; coutconstructor B3.iendl; int getb3() ret

6、urn b3; ; class A:public B2, B1 int a; B3 bb; public: A(int i,int j, int k, int l):B1(i),bb(k),B2(j) a=l;coutconstructor A.lendl; void print() B1:print();B2:print(); couta,bb.getb3()endl; ; int main() A aa(1,2,3,4); aa.print(); return 0; 5写出下面程序的运行结果 答案: 6 外部静态对象 g_sta_Obj 构造 7 外部对象 g_glb_Obj 构造 4 m

7、ain 内动态分配对象 m_all_Obj 构造 4 / 8 4 main 内动态分配对象 m_all_Obj 5 main 内调用 fun 函数 1 fun 内 2 fun 内自动对象 fun_Obj 构造 3 fun 内静态对象 fun_sta_Obj 构造 2 fun 内自动对象 fun_Obj 析构 4 main 内动态分配对象 m_all_Obj 析构 3 fun 内静态对象 fun_sta_Obj 析构 #include #include using namespace std; class A char string80; public : void show(); A(char

8、 * st); A( ); ; A:A(char * st) strcpy(string, st); cout string 构造 endl; A:A( ) cout string 析构 endl; void A:show() cout string endl; void fun( ) cout 1 fun 内 show(); cout5 main 内调用 fun 函数 endl; fun( ); 5 / 8 delete ptrA; static A g_sta_Obj(6 外部静态对象 g_sta_Obj); A g_glb_Obj(7 外部对象 g_glb_Obj); 6写出下面程序的输

9、出结果 答案: a = 2 , b = 4 a = 2 , b = 6 a = 2 , b = 4 a = 2 , b = 6 #include using namespace std; class A public: virtual void Print(int a, int b=4) cout a = a , b = b endl; ; class B : public A public: virtual void Print(int a) cout a = a endl; virtual void Print(int a, double d) cout a = a , d = d Pri

10、nt( 2 ); p - Print( 2, 6.9 ); void main( ) A * pa = new A; B * pb = new B; Show(pa); Show(pb); delete pa; delete pb; 三、改错题(共 25 分,每小题 5 分) 1指出下面的代码中的一处错误,并更正后写出运行结果 #include using namespace std; template class A private: T x,y,s; 6 / 8 public: A(T a,T b) x=a,y=b;s=x+y; void show() coutx+y=sendl; ; v

11、oid main() A add(1.5,5.3); add.show(); 答案: A add(1.5,5.3); 或 x+y=6.8 2改正以下程序类定义部分中的错误。 #include using namespace std; class Point private: int x,y; public: Point(int i,int j) x=i,y=j; void setxy(int i,int j) x=i;y=j; int getx()return x; int gety()return y; ; void main() Point pt; pt.setxy(10,10); cou

12、tpt.getx()endl; 答案: Point pt(1,1); 或加 Point(); 10 3指出以下程序代码中的错误,并改正。 #include using namespace std; class Container protected: double area; public: virtual double GetArea()=0; ; 7 / 8 class Sphere:public Container private: double r; public: Sphere(double a) r=a; virtual double GetArea()area = 4*3.141

13、59*r*r; ; class Cube:public Container private: double h; public: Cube(double a) h=a; virtual double GetArea()area = h*h*6; ; void main() Cube C(10), *ptr; Sphere S(10); ptr = &C; coutCubes area is GetArea()endl; ptr = &S; coutSpheres area is GetArea()endl; 答案: virtual double GetArea()area =

14、4*3.14159*r*r; return area; virtual double GetArea()area = h*h*6; return area; ptr = (Cube*) &S; Cubes area is 600 Spheres area is 1256.64 4. 指出以下程序代码中的错误,并改之。 #include using namespace std; class A1 public: virtual cal(); ; class A2: public A1 void print(); 8 / 8 ; class A3: public A2 public: vi

15、rtual cal()coutA3:cal()endl; ; void main() A3 a3; a3.cal(); 答案: virtual cal()=0; A3:cal() 5. 以下程序可动态分配二维数组并释放内存,且可实现二维指针和一维指针复用, 试问程序能否正常运行,如不能运行找出原因并改正之。 #include #include using namespace std; void * fspace_2d(int row,int col,int lenth) char *p = (char *)calloc(lenth, row*col); void *b = (void *)ca

16、lloc(sizeof(void *),row); for(int i=0;irow;i+) bi = (void*) (p + i*col*lenth); return(b); void ffree_2d(void *a,int row) for( int i=0;irow;i+) free(ai); free(a); void main() int r=5, c=10; float * pArray2D = (float *) fspace_2d( r, c, sizeof(float) ); ffree_2d( (void*) pArray2D, r); 答案: 编译可通过,运行内存访问错。 ffree_2d 函数体改写为 void ffree_2d(void *a, int row) free(a0); free(a); 9 / 8 四、写程序

温馨提示

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

评论

0/150

提交评论