2015度面向对象程序设计试卷.docx

上传人:苏美尔 文档编号:11735340 上传时间:2021-09-01 格式:DOCX 页数:11 大小:15.64KB
返回 下载 相关 举报
2015度面向对象程序设计试卷.docx_第1页
第1页 / 共11页
2015度面向对象程序设计试卷.docx_第2页
第2页 / 共11页
2015度面向对象程序设计试卷.docx_第3页
第3页 / 共11页
2015度面向对象程序设计试卷.docx_第4页
第4页 / 共11页
2015度面向对象程序设计试卷.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《2015度面向对象程序设计试卷.docx》由会员分享,可在线阅读,更多相关《2015度面向对象程序设计试卷.docx(11页珍藏版)》请在三一文库上搜索。

1、华中科技大学研究生课程考试试卷课程名称:面向对象程序设计课程类别詈詈考核形式三小 专业牌闭卷学生类别考试日期2016年 月12日 院系学号姓名任课教师 杨卫东、左峥-一、填空(共15分,每空1分)1、静态多态性是通过函数重载、运算符重载、模板来实现。2、面向对象的四个基本特性是 抽象、多态、继承 和 封装。3、假定AB为一个类,则执行“ AB a(10), b1,*p10;”语句时调用该类构造函数的次数为 2。4、C+谈成员函数有 public 、private 、protected三种类型。5、如果将一个对象说明为常对象,则通过该对象只能调用它的常成员 函数。6、为使外部函数可访问类的私有成

2、员,需将该函数声明为该类的友元函数。7、类B是由类A以保护方式派生的,则类 A中公有访问属性的数据成员在类 B中的 访问属性为保护 。8、+、=、口、,等四种运算符中,可采用友元函数重载的运算符是+。9、抽象类是指具有 纯虚函数 的类,它只能作为基类 来用。二、简答题(共30 分,每小题6 分,其中 4、 5 题任选其一作答即可)1什么是类模板,类模板声明的一般形式是什么?答案:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例) ,从而大大提高编程的效率。定义类模板的一

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

4、3#include using namespace std;class B1int b1;public:B1(int i) b1 = i; cout constructor B1.iendl; void print() coutb1endl; ;class B2int b2;public:B2(int i) b2 = i; coutconstructor B2.iendl; void print() coutb2endl; ;class B3int b3;public:B3(int i) b3 = i; coutconstructor B3.iendl;int getb3() return b

5、3; ;class A:public B2, B1int 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 构造 8 main 内动态分配对象m_all_Obj

6、构造 9 main 内动态分配对象m_all_Obj10 main 内调用 fun 函数1 fun内2 fun内自动对象fun_Obj 构造3 fun内静态对象fun_sta_Obj构造4 fun内自动对象fun_Obj 析构5 main 内动态分配对象m_all_Obj 析构 3. fun内静态对象fun_sta_Obj析构#include #include using namespace std;class A char string80;public :void show();A(char * st);A( );A:A(char * st) strcpy(string, st);cout

7、 string 构造 endl;A:A( )析构 endl; cout string void A:show()cout string endl;void fun( )cout 1 fun 内 show();cout5 main 内调用 fun 函数 endl;fun( );delete ptrA;static A g_sta_Obj(6 外部静态对象g_sta_Obj);A g_glb_Obj(7 外部对象 g_glb_Obj);6写出下面程序的输出结果答案:a = 2 , b = 4a = 2 , b = 6a = 2 , b = 4a = 2 , b = 6#include using

8、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 Print( 2 );p - Print( 2, 6.9 );void main( )A * pa = new A;B * pb = new B;Show(pa);Sho

9、w(pb);delete pa;delete pb;三、改错题(共25 分,每小题5 分)1指出下面的代码中的一处错误,并更正后写出运行结果。#include using namespace std;template class Aprivate:T x,y,s;public:A(T a,T b) x=a,y=b;s=x+y;void show() coutx+y=sendl; ;void main() A add(1.5,5.3);add.show();答案:A add(1.5,5.3); 或 x+y=6.82改正以下程序类定义部分中的错误。#include using namespace

10、std;class Pointprivate: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);coutpt.getx()endl; 答案:或加 Point();Point pt(1,1);103指出以下程序代码中的错误,并改正。#include using namespace std;class Containerprotected:double

11、area;public:virtual double GetArea()=0;class Sphere:public Containerprivate:double r;public:Sphere(double a) r=a;virtual double GetArea()area = 4*3.14159*r*r;class Cube:public Containerprivate:double h;public:Cube(double a) h=a;virtual double GetArea()area = h*h*6;void main()Cube C(10), *ptr;Sphere

12、S(10);ptr = &C;coutCubes area is GetArea()endl;ptr = &S;coutSpheres area is GetArea()endl;答案:virtual double GetArea()area = 4*3.14159*r*r; return area;virtual double GetArea()area = h*h*6; return area;ptr = (Cube*) &S;Cubes area is 600Spheres area is 1256.644. 指出以下程序代码中的错误,并改之。#include using namespa

13、ce std;class A1public:virtual cal();class A2: public A1void print();class A3: public A2public:virtual 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 r

14、ow,int col,int lenth)char *p = (char *)calloc(lenth, row*col);void *b = (void *)calloc(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

15、( r, c, sizeof(float) ); ffree_2d( (void*) pArray2D, r);答案:编译可通过,运行内存访问错。ffree_2d 函数体改写为void ffree_2d(void *a, int row)free(a0);free(a);四、写程序题(共30 分)1、建立一个字符串类用于存储和处理字符串,采用成员函数对操作符+ 进行重载,以实现两个字符串的合并功能。 ( 10 分)2、写一个具有动态多态性的学生和教师信息输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名、输入和显示设计成一个抽象类person 的成员,并将person 类作为学生数据操作类student 和教师操作类teacher 的基类。 程序应能根据待输入人员的类别完成对应人员信息的输入和显示功能。 ( 20 分)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1