C++程序设计A卷第1页共10页一.选择题(每题1分,共10分)一、选择填空(每空1分,共20分)1、类Sample的拷贝构造函数的声明语句为C。A.Sample(Sampleother)B.SampleSample(Sampleother)C.Sample(constSamplet&other)D.SampleSample(constSample&other)2、Sample是用户定义的某个类,obj是Sample类的对象,p是Sample类的指针,则执行语句p=newSample时会调用A函数,执行obj=*p时会调用C函数,执行deletep是会调用B函数。A.Sample类的构造函数B.Sample类的析构函数C.Sample类的赋值运算符重载函数D.Sample类的拷贝构造函数3、对于下面定义的类classBase{protected:intx;public:Base(intval=1){x=val;}virtualvoiddisp(){coutxendl;}voidprint(){coutxendl;}};classDerived:publicBase{inty;public:Derived(intval1=0,intval2=0):Base(val1){y=val2;}voiddisp(){coutx=xy=yendl;}voidprint(){coutx=xy=yendl;}};有定义Deriveddd(3,4);Base*bp=&dd,bb=dd;则dd.disp()执行的是A,dd.print()执行的是B,bp-disp()执行的是A,bb.disp()执行的是C。A、派生类的disp函数B、派生类的print函数C、基类的disp函数D、基类的print函数上海交通大学试卷(A)参考答案(2010至2011学年第_二_学期期中考卷)班级号__学号______________姓名课程名称C++程序设计成绩C++程序设计A卷第2页共10页4、公有成员提供了类对外部的接口,私有成员是类的内部实现,而C不许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,也提供了开放的接口。A.私有成员B.私有成员函数C.保护成员D.公有成员5、如果A是已经定义好的一个类,函数f的原型为Af(A&other).r2是A类的一个对象,执行函数调用f(r2)时会调用D,在函数f中执行returnr2时,会调用A。A.拷贝构造函数B.缺省的构造函数C.赋值运算符重载函数D.不调用任何函数6、假定要对类X定义加号操作符重载成员函数,实现两个X类对象的加法,并返回相加后的结果,则该成员函数的声明语句为DA.Xoperator+(constX&a,constX&b);B.X&operator+();C.operator+(Xa);D.Xoperator+(constX&a)const;7、如Base的定义如第3题所示,则执行了语句Baseobj[4]={3,4};时,构造函数被调用了D次,obj[0]的x值为C,obj[1]的x值为D,obj[2]的x值A,obj[3]的x值为A。A、1B、2C、3D、48、链表结点的结构类型为structlinkRec{intdata;linkRec*next;},如果指针rear指向尾结点,将节点p链入表尾,并将p作为新的表尾可用语句CA、rear-next=p-next;rear=p;B、rear-next=rear;p-next=p;C、rear-next=p;rear=p;D、(*rear).next=rear;(*p).next=p;9.对友元(friend)不正确的描述是:D。A.友元关系既不对称也不传递。B.友元声明可以出现在private部分,也可以出现在public部分。C.整个类都可以声明为另一个类的友元。D.类的友元函数必须在类的作用域以外被定义。10。关于纯虚函数和抽象类的描述中,错误的是C。A。纯虚函数是一种特殊的虚函数,它没有具体的实现。B。抽象类是指具有纯虚函数的类。C。一个基类说明中有纯虚函数,该基类的派生类不再是抽象类。D。抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。我承诺,我将严格遵守考试纪律。承诺人:题号得分批阅人(流水阅卷教师签名处)rearpC++程序设计A卷第3页共10页二.看程序,写结果(每题5分,共40分)1、写出下列程序的执行结果classSample{private:intx;public:Sample(intval=0){x=val;cout“构造”xendl;}Sample(constSample&obj){x=obj.x;cout“拷贝构造”xendl;}~Sample(){cout“析构”xendl;}voidoperator++(){x++;}};voidfoo(Samplei);intmain(){Samples1,s2(1);foo(s1);foo(2);return0;}voidfoo(Samplei){staticSamples3=I+1;++s3;}2.请写出下列程序在执行时会出现什么问题,如何改正这个错误#includeiostream.h#includecstringclasssample{private:char*string;public:sample(constchar*s){string=newchar[strlen(s)+1];strcpy(string,s);}~sample(){deletestring;}};samplef(char*arg){sampletmp(arg);returntmp;}intmain(){samplelocal=f(abcd);return0;}S3=i+1时的答案构造0构造1拷贝构造0拷贝构造1析构0构造2析构2析构1析构0析构3程序执行会异常终止。原因是缺少拷贝构造函数使得local的string指向的空间不存在S3=i时的答案构造0构造1拷贝构造0拷贝构造0析构0构造2析构2析构1析构0析构2C++程序设计A卷第4页共10页3、请写出下列程序运行结果classADD{friendbooloperator=(constADD&p1,constADD&p2){returnp1.a+p1.b=p2.a+p2.b;}public:ADD(inti=0,intj=0){a=i;b=j;}voidShow()const{couta=a,b=bendl;}ADD&operator++(){++a;return*this;}ADDoperator++(intn);private:inta,b;};ADDADD::operator++(intn){ADDtmp=*this;++b;returntmp;}intmain(){constADDorigin(10,6);ADDvalue(6,7);intn=0;while(value=origin)if(n++%2)++value;elsevalue++;value.Show();cout“n=“nendl;return0;}a=8,b=9n=4C++程序设计A卷第5页共10页4、请写出下列程序运行结果classBase{protected:intx;public:Base(intval=0){x=val;}virtualvoidoperator++(){x++;}virtualvoiddisp(){coutxendl;}};classDerived:publicBase{inty;public:Derived(intval1=0,intval2=0):Base(val1){y=val2+val1;}voidoperator++(){++x;++y;}voiddisp(){coutx=xy=yendl;}};intmain(){Base*p;Derivedd(3,5);Baseb=d;++b;b.disp();d.disp();++d;d.disp();p=&d;++(*p);p-disp();d.disp();return0;}5、写出下列程序的执行结果classmodel{friendbooloperator!(modelm1){returnm1.n!=m1.m;}private:intn,m;public:model(intt1,intt2){n=t1;m=t2;}operatorint()const{returnn+m;}};voidmain(){models(30,40);cout(!s?s+10:s–10)endl;}4x=3y=8x=4y=9x=5y=10x=5y=1080C++程序设计A卷第6页共10页6、写出下列程序的执行结果classCST{friendostream&operator(ostream&os,constCST&ob);friendCSToperator+(constCST&op1,constCST&op2){CSTtmp;tmp.data=op1.data+op2.data;returntmp;}public:CST(){data=count++;cout“constructing“dataendl;}~CST(){count--;cout“deconstructing“dataendl;}staticintcount;private:intdata;};ostream&operator(ostream&os,constCST&ob){osob.data;returnos;}intCST::count=10;intmain(){CSTcs,*ptr1,*ptr2;coutCST::count=CST::countendl;ptr1=newCST;ptr2=newCST;cs=*ptr2+*ptr2;cout*ptr2“+“*ptr2“=“csendl;deleteptr1;deleteptr2;coutCST::count=CST::countendl;return0;}Constructing10CST::count=11Constructing11Constructing12Constructing13Deconstructing24Deconstructing2412+12=24Deconstructing11Deconstructing12CST::count=10Deconstructing24C++程序设计A卷第7页共10页7、写出下列程序的执行结果classCBase{public:CBase(inti){m_data=i;coutConstructorofCBase.m_data=m_dataendl;}virtual~CBase(){coutDestructorofCBase.m_data=m_dataendl;}protected:intm_data;};classCDerived:publicCBase{public:CDerived(inti):m_data(i),CBase(i+10){coutConstructorofCDerived.m_data=m_dataendl;}~CDerived(){coutDestructorofCDerived.m_data=m_dataendl;}private:intm_data;};intmain(){CBase*p;p=newCBase(10);deletep;p=newCDerived(10);deletep;return0;}ConstructorofCBase.m_data=10Destruct