您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 程序设计C++试题和答案
1程序设计Ⅱ(C++语言)期中考试试题班级:_________学号:_________姓名:_________一、简答题(每小题4分,共20分)1.在C++中声明类时,如何做到多个实例共享一个全局变量?2.引用和指针之间有什么区别?3.什么是抽象类?析构函数可以声时为虚函数吗?如果可以,在什么情况下使用?4.什么是多态性?多态性是如何实现的?5.构造函数与析构函数的功能是什么?在继承层次上,构造函数和析构函数的调用顺序如何?二、程序改错题(每小题5分,共20分)1.下面的程序是否有错误,如果有错,请说明原因并改正。#includeiostream.hint*FuncOne(){int*pint=newint(5);countthevalueofpIntinFuncOneis:*pintendl;returnpint;}intmain(){int*pint=FuncOne();coutthevalueofpIntbackinmainis:*pintendlreturn0;}2.下面的程序是否有错误,如果有错,请说明原因并改正。structA1{inti;};classA2{inti;};intmain(){A1a1;a1.i=0;A2a2;a2.i=0;}3.下面的程序是否有错误,如果有错,请说明原因并改正。intmain(){charszTest[]=hello;constchar*psz=szTest;psz[0]=‘b’;}4.下面的程序是否有错误,如果有错,请说明原因并改正。classShape(){public:Shape();virtual~Shape();virtualShape(constShape&);}三、程序阅读题(每小题5分,共20分)1.分析下面的程序,并写出运行结果。classA{public:virtualvoidfunc(){coutIaminbaseendl;};};classB:publicA{public:virtualvoidfunc(){coutIaminderivedendl;}};voidmain(){B*bb=newB;bb-func();A*aa=bb;aa-func();}以上程序的输出结果是。2.分析下面的程序,并写出运行结果。classSample{public:intv;Sample(){};Sample(intn):v(n){};Sample(Sample&x){v=2+x.v;}};SamplePrintAndDouble(Sampleo){couto.vendl;o.v=2*o.v;returno;}intmain(){Samplea(5);Sampleb=a;coutb.vendl;Samplec=PrintAndDouble(b);coutc.vendl;Sampled;d=a;coutd.vendl;}2以上程序的输出结果是。3.分析下面的程序,并写出运行结果。classA{public:intval;A(int=0){val=n;};A&GetObj(){return*this;}};main(){Aa;couta.valendl;a.GetObj()=5;couta.valendl;}以上程序的输出结果是。4.分析下面的程序,并写出运行结果。classB{private:intnBVal;public:B(intn){nBVal=n;}voidPrint(){coutnBVal=nBValendl;}};classD:publicB{private:intnDVal;public:D(intn):B(3*n){nDVal=n;}voidPrint(){B::Print();coutnDVal=nDValendl;}};main(){B*pb=newB(2);pb-Print();Dd(4);d.Print();B*p=&d;p-Print();deletepb;}以上程序的输出结果是。四、程序填空题(每小题10分,共20分)1.填空使程序能编译通过,并写出运行的输出结果。classMyString{private:char*p;public:MyString(char*s){p=newchar[strlen(s)+1];strcpy(p,s);}MyString(MyString&o){strcpy(p,o.p);}~MyString(){delete[]p;}voidCopy(char*s){p=newchar[strlen(s)+1];strcpy(p,s);}constchar*c_str(){}};main(){MyStrings1(This),s2=s1;s2.Copy(Hello);couts1.c_str()endls2.c_str();}该程序输出结果为:。2.填空使程序能编译通过,并写出运行的输出结果。#includeiostream.htemplateclassmyclass{Ti;public:myclass(Ta){i=a;}voidshow(){coutiendl;}};voidmain(){myclassobj(This);obj.show();}该程序输出结果为:。五、程序设计题(共20分)设有如下定义的几个类,其中,Graphic是个抽象类,它定义了平面封闭图形应该具有的运算求面积getArea,它可以有任意多子类,如Circle和Rectangle便是它的两个子类。GraphicContainer是一个包含Graphic对象的类,该类有两个数据成员,其中:m_buffer是个数组,用于存放不同的Graphic对象;m_sum用来表示该数组中实际存放元素的个数,即Graphic对象的总数。现在要求你完成该类的求所有Graphic对象总面积函数getAllArea的实现代码。为了完成该函数,允许你在其它相关类中增加方法及其实现。3程序设计Ⅱ(C++语言)期中考试参考答案一、简答题(每小题5分,共20分)6.在C++中声明类时,如何做到多个实例共享一个全局变量?声明一个类静态成员变量。7.引用和指针之间有什么区别?引用是一个别名,而指针是一个保存地址的变量。8.什么是抽象类?析构函数可以声时为虚函数吗?如果可以,在什么情况下使用?如果一个类中包括纯虚函数,则该类为抽象类,抽象类不能实例化,主要是作为接口定义。一般情况下类的析构函数都定义成虚函数,主要是考虑在使用基类指针操作派生类对象时保证类的析构顺序。9.什么是多态性?多态性是如何实现的?函数多态性是指用多个含义重载一个函数的能力,即允许创建多个名称相同的函数。可通过改变同名函数变元的类型或个数来实现。10.构造函数与析构函数的功能是什么?在继承层次上,构造函数和析构函数的调用顺序如何?构造函数用来初始化。析构函数用来做清除工作,一般包括内存释放。在继承层次上,构造函数和析构函数的调用顺序为:构造函数是先基类,后派生类;析构函数是先派生类,后基类。二、程序改错题(每小题5分,共20分)5.下面的程序是否有错误,如果有错,请说明原因并改正。#includeiostream.hint*FuncOne(){int*pint=newint(5);countthevalueofpIntinFuncOneis:*pintendl;returnpint;}intmain(){int*pint=FuncOne();coutthevalueofpIntbackinmainis:*pintendlreturn0;}有错误,内存泄漏。#includeiostream.hintFuncOne(){int*pint=newint(5);coutthevalueofpIntinFuncOneis:*pintendl;inttemp=*pint;deletepint;returntemp;}intmain(){inttheint=FuncOne();cout”thevalueofpIntbackinmainis:”theintendl;return0;}6.下面的程序是否有错误,如果有错,请说明原因并改正。structA1{inti;};classA2{inti;};intmain(){A1a1;a1.i=0;A2a2;a2.i=0;}有错误,类定义中未显示权限定义符缺省为private。structA1{inti;};classA2{public:inti;};intmain(){A1a1;a1.i=0;A2a2;a2.i=0;}7.下面的程序是否有错误,如果有错,请说明原因并改正。intmain(){charszTest[]=hello;constchar*psz=szTest;psz[0]=‘b’;}4有错误,psz是一字符串指针,该指针指向的内容是常量,指针指向的内容不能被修改。intmain(){charszTest[]=hello;char*constpsz=szTest;psz[0]=‘b’;}8.下面的程序是否有错误,如果有错,请说明原因并改正。classShape(){public:Shape();virtual~Shape();virtualShape(constShape&);}有错误,不能声明一个拷贝构造函数为虚拟函数。classShape(){public:Shape();virtual~Shape();Shape(constShape&);}三、程序阅读题(每小题5分,共25分)5.分析下面的程序,并写出运行结果。classA{public:virtualvoidfunc(){coutIaminbaseendl;};};classB:publicA{public:virtualvoidfunc(){coutIaminderivedendl;}};voidmain(){B*bb=newB;bb-func();A*aa=bb;aa-func();}以上程序的输出结果是:IaminderivedIaminderived6.分析下面的程序,并写出运行结果。classSample{public:intv;Sample(){};Sample(intn):v(n){};Sample(Sample&x){v=2+x.v;}};SamplePrintAndDouble(Sampleo){couto.vendl;o.v=2*o.v;returno;}intmain(){Samplea(5);Sampleb=a;coutb.vendl;Samplec=PrintAndDouble(b);coutc.vendl;Sampled;d=a;coutd.vendl;}以上程序的输出结果是:792057.分析下面的程序,并写出运行结果。classA{public:intval;A(intn=0){val=n;};A&GetObj(){return*this;}};main(){Aa;couta.valendl;a.GetObj()=5;5couta.valendl;}以上程序的输出结果是:058.分析下面的程序,并写出运行结果。classB{private:intnBVal;public:B(intn){nBVal=n;}voidPrint(){coutnBVal=nBValendl;}};classD:publicB{private:intnDVal;public:D(intn):B(3*n){nDVal=n;}voidPrint(){B::Print();coutnDVal=nDValendl;}};main(){B*pb=newB(2);pb-Print();Dd(4);d.Print(
本文标题:程序设计C++试题和答案
链接地址:https://www.777doc.com/doc-4331451 .html