第1页共4页课程名称:面向对象程序设计(A卷闭卷)适用专业年级:计算机科学与技术09级考试时间:100分钟(参考解答)题号一二三四五六七八九十总分统分人签名题分102410261020100得分考生注意事项:1、本试卷共3页,试卷如有缺页或破损,请立即举手报告以便更换。2、考试结束后,考生不得将试卷、答题纸和草稿纸带出考场。(答案请写在密封线内和答卷正面,否则不记分)一、判断题,正确的在下列表格中打√,错误的打×(每小题1分,共10分)12345678910√×√√√√××××1.在C++中,标识符Student和student是不一样的。()2.设函数fun()是一个不属于任何类的普通函数,则在调用该函数时只能用fun()方式,而不能用::fun()方式来调用。()3.类的构造函数不能声明为虚构造函数。()4.使用MFC编程时,如果要执行窗体重绘函数OnDraw,可以通过Invalidate或者InvalidateRect函数来实现。()5.char*constp表明p是一个指针,它只能指向一个字符串常量。()6.在定义二维数组时,语句“intSum[][2]={{1,2},{3},{}};”是正确的。()7.在C语言中,不使用命名空间,但在C++程序中,一定要使用命名空间。()8.在C++中,文件的输入输出可以通过iostream类对象来完成。()9.在编程中,有了面向对象的程序设计方法后,就不要用面向过程的程序设计方法了。()10.类中的静态成员数据为该类的所有成员所共享,在初始化后,它的值不能被修改。()二、简答题(每小题8分,共24分)1.什么是类?什么是对象?什么是面向对象程序设计?答:类:是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。(2分)对象:是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。(2分)面向对象的程序设计:它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。(4分)2.多态性是指什么?编译时的多态性和运行时的多态性在实现方法上有何不同?多态性是指:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。(4分)编译多态性也称静态多态性,它是通过函数重载和运算符重载实现的。(2分)运行多态性也称动态多态性,它是通过继承和虚函数来实现的。(2分)3.什么是简单继承?什么是多重继承?如果不想再往下继承的类的功能可以采用什么样的继承方式?简单继承:派生类的基类只有一个的继承方法。(3分)多重继承:派生类的基类同时有多个时的继承方法。(3分)可以采用私有继承方式来隐藏基类的属性。(2分)三、填空题(每空2分,共10分)1.下面递归函数NTimes(n,m)求nm。填充程序中不完整的部分(假设m=0,否则返回值为0)。intNTimes(intn,intm)//递归函数NTimes(n,m)求nm。{if(m0)return0;if(m==0)(1);elsereturn(2);}湖南工业大学考试试卷纸系(院)计算机与通信学院课程名称面向对象程序设计班级姓名学号————————————————————————密封线——————————————————————解答(1)return1(2)n*Ntimes(n,m-1)(评分标准:每空2分等价写法给满分)第2页共4页2.下面的函数是判断由pHead所指向的链表是否是循环链表,如果是循环链表,则函数返回1,否则返回0。链表的结构为:structMyLink{intdata;MyLink*Next;};补充程序中不完整的地方。intCheckLink(MyLink*pHead){MyLink*p;if(pHead==NULL)return0;p=____(3)____;while(p!=NULL){if(p==pHead)____(4)____;elsep=____(5)____;}return0;}四、阅读下面的程序,写出程序运行的结果。(共26分)1.程序1(6分)#includeiostreamusingnamespacestd;intmyfun(int&x,int*p){inti=0;i=x++;i+=(*p)++;return(i);}intmain(){inta=4,b=5,c;while(b){c=myfun(a,&b);coutabcendl;if(c10)b=0;elseb=b+5;}return0;}2.程序2(10分)#includeiostream.h//Toy-carclassCToy{public:CToy(){coutCreateCToy.endl;}CToy(charcolor){coutCreateCToy:colorendl;}~CToy(){coutdeleteCToy.endl;}};classCCar{public:CCar(intTire=4){coutcreateCCar:Tireendl;}~CCar(){coutdeleteCCar.endl;}};classCToy_Car:publicCToy,publicCCar{public:CToy_Car(intp):member(),CCar(p),CToy(){coutcreateCToy_Car.endl;}~CToy_Car(){coutdeleteCToy_Car.endl;}private:CToymember;};voidmain(){CToy_Cartoyc(4);}湖南工业大学考试试卷纸系(院)计算机与通信学院课程名称面向对象程序设计班级姓名学号————————————————————————密封线——————————————————————解答:(评分标准:每对一个得1分,全对得6分。)程序1的运行结果如下:56961216解答(3)pHead-Next(4)return1(5)p-Next(评分标准:每空2分等价写法给满分)2.程序2(评分标准:每对一行给1分,全部正确给10分)答:程序运行结果为:CreateCToy.createCCar:4CreateCToy.createCToy_Car.deleteCToy_Car.deleteCToy.deleteCCar.deleteCToy.第3页共4页3.程序3(10分)#includeiostream.hclassPen{public:charcolor;Pen(){coutPenBegin.endl;}virtualvoidwrite(){coutPenwrite.endl;}voidRewrite(){write();}};classPencil:publicPen{public:virtualvoidwrite(){coutPencilwrite.endl;}};voidmain(){Pen*pt1,pen1;Pencilpencil1;pt1=&pen1;pt1-write();pt1=&pencil1;pt1-write();pt1-Rewrite();}五、理解问答题(10分)说明:读懂如下程序,回答题后的问题。#includeiostream.hclassComplex{private:floatreal,imag;public:Complex(floatr=0,floati=0){real=r;imag=i;}voidDisplay(){coutreal;if(imag0)cout+imagi;elseif(imag0)coutimagi;coutendl;}Complexoperator+(Complex&b);friendComplexoperator-(Complex&a,Complex&b);};ComplexComplex::operator+(Complex&b){Complex*t=newComplex(___(1)____);//标记行1return*t;//标记行2}Complexoperator-(Complex&a,Complex&b){Complex*t=newComplex(a.real–b.real,a.imag–b.imag);return*t;}voidmain(){Complexc1(4.0,5.0),c2(2.0,-7.0),c3;c3=c1+c2;c3.Display();c3=c1-c2;c3.Display();}请回答的问题:(1)补充程序中标记行1所在的(1)空,使程序完整。(2分)(2)标记行1使用new来创建一个对象,但程序中没有用到delete来销毁对象,程序执行会存在潜在问题。如果不用new语句,改用其他语句来替代标记行1和标记行2所在的语句,使程序功能一致。写出修改后的语句(语句条数不限)。(3分)(3)简述运算符重载函数作为类成员函数和友元函数时的主要区别。(2分)(4)写出程序运行的结果。(3分)湖南工业大学考试试卷纸系(院)计算机与通信学院课程名称面向对象程序设计班级姓名学号————————————————————————密封线——————————————————————3.程序3(评分标准:每对一行给2分)答:程序运行结果为:PenBegin.PenBegin.Penwrite.Pencilwrite.Pencilwrite.第4页共4页六、编程题(20分)定义一辆自行车类Bike,它的公有数据成员有Mode(型号,为string型),Color(颜色,为char型),Price(价格,为float型)。私有的数据成员有Ower(拥有者,为string型)。公用成员函数有:GetOwer(),它返回该车的拥着者Ower;SetOwer(stringOwerValue),它设置该车的拥着者Ower。Bike类的构造函数原型为:Bike(stringBMode=飞鹤2011,charBColor='R',floatBPrice=200.00),初始化Ower为空。要求:(1)编写类Bike,并编写一个主程序,主程序中定义2个自行车对象(其中有一辆车的参数为默认参数,另一辆车参数可以是任意有效值)。(2)重载输出流,使它能输出自行车类的对象(即输出Bike类对象的所有数据成员,然后使用该输出流输出前2辆车的基本信息。(3)定义一个输出文件BikeFile.txt,把上述两辆车对象的Ower输出到这个文件中。解答:(全部正确得满分,部分错误,酌情扣分。等价写法给全分)#includeiostream#includefstream#includestringusingnamespacestd;classBike{public:stringMode;charColor;floatPrice;private:stringOwer;public:stringGetOwer(){returnOwer;};voidSetOwer(stringOwerValue){Ower=OwerValue};Bike(stringBMode=飞鹤2011,charBColor='R',floatBPrice=200.00){Mode=BMode;Color=BColor;Price=BPrice;Ower=;}friendostream&operator(ostream&Output,Bike&B);};ostream&operator(ostream&Output,Bike&B){coutB.Modeendl;coutB.Colorendl;coutB.Priceendl;coutB.Owerendl;returnOutput;}解