重庆大学试卷教务处07版第1页共3页重庆大学面向对象程序设计与C++课程试卷juan2008~2009学年第1学期开课学院:计算机课程号:18008035考试日期:2009/01考试方式:考试时间:120分钟题号一二三四五六七八九十总分得分(注:本卷来源于网络,是重大C++期末试卷,非考研复试的)一、简答(25分,5分/小题)1.解释引用和指针的异同。2.什么叫晚绑定,如何实现的?3.在何种情况下,copyconstructor会被调用?默认的拷贝构造函数如何执行对象拷贝?4.解释public,private,protected的意义和用途。5.什么叫名字装饰,名字装饰在C++中起什么作用?二、程序分析(35分)1.阅读下述程序,写出执行结果(6分)#includeiostreamusingnamespacestd;intb=6;intfunc(int&x){coutbendl;b=b+2;x=x+3;coutxendl;returnb;}intmain(){inta=2,b=2;b+=func(a);coutb=b\n;couta=aendl;cout::b;return0;}2.阅读下述程序,写出执行结果并对执行过程作出解释(8分)#includefstream#includestringusingnamespacestd;ofstreamout(HowMany.out);classHowMany{staticintobjectCount;public:HowMany(){objectCount++;}staticvoidprint(conststring&msg=){if(msg.size()!=0)outmsg:;outobjectCount=objectCountendl;}~HowMany(){objectCount--;print(~HowMany());}};intHowMany::objectCount=0;//PassandreturnBYVALUE:HowManyf(HowManyx){x.print(xargumentinsidef());returnx;命题人:陈波组题人:陈波审题人:葛亮命题时间:2008-12教务处制学院专业、班年级学号姓名公平竞争、诚实守信、严肃考纪、拒绝作弊封线密重庆大学试卷教务处07版第2页共3页}intmain(){HowManyh;HowMany::print(afterconstructionofh);HowManyh2=f(h);HowMany::print(aftercalltof());}3.阅读程序,写出执行结果(8分)#includeiostreamusingnamespacestd;classPet{inti;public:virtualvoideat()const{coutPet::eatendl;}voidspeak()const{coutPet::speakendl;}virtualvoidsleep()const{coutPet::sleependl;}};classGoldfish:publicPet{public:voideat()const{coutGoldfish::eatendl;}virtualvoidspeak()const{coutGoldfish::speakendl;}};intmain(intargc,char*argv[]){cout“sizeofPet=”sizeof(Pet)endl;Goldfishbob;cout”sizeofbob=”sizeof(bob)endl;bob.eat();bob.speak();bob.sleep();Pet*p=&bob;p-eat();p-speak();p-sleep();return0;}4.找出下述程序的错误,并说明原因(5分)classX{inta;public:intfunc(void){returna++;}};classY:publicX{public:voidset(intc){this-a=c;}intdescribe()const{returnfunc();}};重庆大学试卷教务处07版第3页共3页5.将模板类Array的定义补充完整,使得程序可以正确运行。(8分)#includeiostream#includestringusingnamespacestd;templateclassTclassArray{enum{size=100};TA[size];public:};voidmain(){Arraystringas;as[0]=0;for(inti=1;ias.size();i++){as[i]+=as[i-1];}}三、程序设计(40分)1.创建一个名为Monitor的类,它可以记录其incident()成员函数被执行的次数。为Monitor类添加一个print()成员函数以显示incident()函数被执行的次数。(10分)2.创建一个简单的Shape继承结构。Shape被定义为基类,Circle,Square,Triangle定义为Shape的子类;为Circle,Square,Triangle定义合适的数据成员用于存储坐标、半径等信息;为三个子类定义合适的构造函数以初始化图形(构造函数参数中给出坐标,半径等信息);为三个子类定义公开函数draw()用于描绘图形;定义一个全局函数drawShape(Shape&s),该函数以一个Shape的引用为参数,但能正确地描绘出不同子类型的图形。(20分)说明:draw函数内部不用写出具体代码,以下述形式代码代替:cout“Circle::draw()”endl;3.创建一个Message类,其构造函数使用一个string型默认值为”Unnamed”的参数。在构造函数里,用参数初始化其私有string型数据成员sValue;为Monitor类创建两个重载的print函数,其中一个零参数,它简单输出sValue的值;另外一个接受一个string型参数,它先输出参数值作为标题,再输出sValue作为内容。(10分)答题纸