




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华中科技大学研究生课程考试试卷面向对象程序设计开卷闭卷公共课专业课课程名称: 课程类别 考核形式2016年1月12日学生类别_考试日期_ 院系_杨卫东、左峥嵘学号_姓名_任课教师_一、填空(共15分,每空1分)1、静态多态性是通过 函数重载、运算符重载、模板 来实现。2、面向对象的四个基本特性是 抽象 、 多态 、 继承 和 封装 。3、假定AB为一个类,则执行“AB a(10), b1,*p10;”语句时调用该类构造函数的次数为 2 。4、C+类成员函数有 public 、 private 、 protected 三种类型。 5、如果将一个对象说明为常对象,则通过该对象只能调用它的 常成员
2、函数。6、为使外部函数可访问类的私有成员,需将该函数声明为该类的 友元函数 。7、类B是由类A以保护方式派生的,则类A中公有访问属性的数据成员在类B中的访问属性为 保护 。8、+、=、-等四种运算符中,可采用友元函数重载的运算符是 + 。9、抽象类是指具有 纯虚函数 的类,它只能作为 基类 来使用。二、简答题(共30分,每小题6分,其中4、5题任选其一作答即可)1什么是类模板,类模板声明的一般形式是什么?答案:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大
3、提高编程的效率。定义类模板的一般形式是:template class 类名类声明体;2什么是this指针? 它的主要作用是什么?答案:this指针:隐含在非静态成员函数中的特殊指针,它是当前正在调用此成员函数的对象的指针。作用:主要是用于保证访问不能跨界和用于区分不同的对象。成员函数对成员变量的引用实际是通过this指针访问的,也就是说:成员变量this-成员变量;另外,如果成员函数需要访问当前对象,也可以通过this指针,*this就是当前对象。3什么是多继承?多继承时,构造函数和析构函数执行顺序是怎样的?答案:多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。派
4、生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),再执行派生类的构造函数,析构函数执行顺序,与构造函数完全相反。4写出下面程序的运行结果答案:constructor B2.2constructor B1.1constructor B3.3constructor A.4124,3#includeusing namespace std;class B1int b1;public: B1(int i) b1 = i;cout constructor B1.iendl; void print() coutb1endl; ;class B2int b2;publi
5、c: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 b3; ;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();B
6、2: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 main内动态分配对象m_all_Obj构造4 main内动态分配对象m_all_Obj5 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析构
7、#include #include using namespace std;class A char string80;public :void show();A(char * 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( ); delete ptrA;static A g_s
8、ta_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 namespace std;class Apublic: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; virt
9、ual 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); Show(pb); delete pa; delete pb;三、改错题(共25分,每小题5分)1指出下面的代码中的一处错误,并更正后写出运行结果。 #include using namespace std;template class A private: T x,y,s; public: A(T a,T b) x=a
10、,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 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 m
11、ain() Point pt; pt.setxy(10,10); coutpt.getx()endl; 答案:Point pt(1,1); 或加 Point();103指出以下程序代码中的错误,并改正。#include using namespace std;class Containerprotected:double area;public:virtual double GetArea()=0; class Sphere:public Container private:double r;public: Sphere(double a) r=a; virtual double GetAre
12、a()area = 4*3.14159*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
13、= 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 namespace std;class A1public:virtual cal();class A2: public A1void print();class A3: public A2public:virtual cal()coutA3:cal()end
14、l;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 *)calloc(sizeof(void *),row);for(int i=0;ir
15、ow;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);四、写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北学业水平数学试卷
- 河北廊坊2024年中考数学试卷
- 江苏90后小学数学试卷
- 河北大模考数学试卷
- 河北省2024年单招数学试卷
- 桂林市中考数学试卷
- 江苏高三六校数学试卷
- 合肥包河九年级数学试卷
- 黑山县小升初数学试卷
- 河北宣化2024中考数学试卷
- 2024年吉林省预防接种技能竞赛理论考试题库(含答案)
- 2024年高考新课标全国卷政治试题分析及2025届高考复习备考建议
- JBT 14714-2024 锂离子电池X射线检测设备(正式版)
- 棋牌室入股合伙人协议书
- 关于诊疗科目、床位(牙椅)等执业登记项目以及卫生技术人员、业务科室和大型医用设备变更情况说明
- 交通事故赔偿起诉状范例合集
- 热敏灸疗法课件
- FZT 74005-2016 针织瑜伽服行业标准
- JJG 4-2015钢卷尺行业标准
- 心衰患者的容量管理中国专家共识-共识解读
- 益生菌策划方案
评论
0/150
提交评论