您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++面向对象程序设计练习题
《面向对象程序设计》练习题一、单项选择题(1)若有以下类定义classMyClass{public:MyClass(){cout1;}};则执行语句MyClassa,b[2],*p[2];后,程序的输出结果是(B)A)11B)111C)1111D)11111(2)下面程序的输出结果是(B)#includeiostreamusingnamespacestd;inti=0;intfun(intn){staticinta=2;a++;returna+n;}voidmain(){intk=5;{inti=2;k+=fun(i);}k+=fun(i);coutk;}A)13B)14C)15D)16(3)下面程序的输出结果是(A)#includeiostreamusingnamespacestd;voidswap1(int&v1,int&v2){inttmp=v2;v2=v1;v1=tmp;}voidswap1(int*v1,int*v2){inttmp=*v2;*v2=*v1;*v1=tmp;}voidmain(){inti=10,j=20;swap1(i,j);swap1(&i,&j);couti”,”jendl;}A)10,20B)20,10C)10,10D)20,20(4)下面的程序段的运行结果为(D)charstr[]=job,*p=str;cout*(p+2)endl;A)98B)无输出结果C)字符’b’的地址D)字符’b’(5)下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classA{public:A(inti){x=i;}voiddispa(){coutx“,”;}private:intx;};classB:publicA{public:B(inti):A(i+10){x=i;}voiddispb(){dispa();coutxendl;}private:intx;};voidmain(){Bb(2);b.dispb();}A)10,2B)12,10C)12,2D)2,2(6)下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classBase{public:Base(inti){couti;}~Base(){}};classBase1:virtualpublicBase{public:Base1(inti,intj=0):Base(j){couti;}~Base1(){}};classBase2:virtualpublicBase{public:Base2(inti,intj=0):Base(j){couti;}~Base2(){}};classDerived:publicBase2,publicBase1{public:Derived(inta,intb,intc,intd):mem1(a),mem2(b),Base1(c),Base2(d),Base(a){coutb;}private:Base2mem2;Base1mem1;};voidmain(){DerivedobjD(1,2,3,4);}A)134122B)123412C)14302012D)143212(7)以下程序对一维坐标点类Point进行运算符重载,输出结果是(A)#includeiostreamusingnamespacestd;classPoint{public:Point(intval){x=val;}Pointoperator++(){x++;return*this;}Pointoperator++(int){Pointold=*this;++(*this);returnold;}Pointoperator+(Pointa){x+=a.x;return*this;}intGetX()const{returnx;}private:intx;};intmain(){Pointa(10);cout(++a).GetX();couta++.GetX();}A)1111B)1011C)1112D)1010(8)下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classBase{public:virtualvoidf(){cout“f0+”;}voidg(){cout“g0+”;}};classDerived:publicBase{public:voidf(){cout“f+”;}voidg(){cout“g+”;}};voidmain(){Derivedd;Base*p=&d;p-f();p-g();}A)f+g+B)f0+g+C)f+g0+D)f0+g0+(9)下面程序的输出结果是(C)#includeiostreamusingnamespacestd;intcountp=0;classPoint{intX,Y;public:Point(intx=0,inty=0){X=x;Y=y;}Point(Point&p){X=p.X;Y=p.Y;countp++;}friendPointmyfun(Pointp1,Pointp2,constPoint&p3);};Pointmyfun(Pointp1,Pointp2,constPoint&p3){Pointtmp(p1.X+p2.X+p3.X,p1.Y+p2.Y+p3.Y);returntmp;}voidmain(){Pointpp0,pp1(1,2),pp2(1);myfun(pp0,pp1,pp2);std::coutcountpendl;}A)0B)4C)3D)6(10)下面程序的输出结果是(C)#includeiostreamusingnamespacestd;classSample{friendlongfun(Samples){if(s.x2)return1;returns.x*fun(Sample(s.x-1));}public:Sample(longa){x=a;}private:longx;};voidmain(){intsum=0;for(inti=0;i6;i++){sum+=fun(Sample(i));}coutsum;}A)120B)16C)154D)34二、填空题(1)以下程序是用来计算小于16的整数的阶乘,请补充完整。#includeiostreamusingnamespacestd;constintArSize=16;voidmain(){doublefac[ArSize];fac[1]=fac[0]=1.0;for(inti=2;iArSize;i++)fac[i]=i*fac[i-1];}(2)下面是个Cat类的声明与使用,请补充完整。#includeiostreamusingnamespacestd;classCat{staticintcount;public:Cat(){count++;coutNowcatnumberiscountendl;}~Cat(){count--;coutNowcatnumberiscountendl;}};intCat::count=0;intmain(){Cata,b,c;return0;}(3)将下面的MyPoint类定义补充完整,使得程序的输出结果是(10,10)(5,5)#includeiostreamclassMyPoint{public:MyPoint(intxx=5,intyy=5){X=xx;Y=yy;std::cout(X,Y);}private:intX,Y;};voidmain(){MyPointa(10,10),b;}(4)已知文件之间具有以下的包含关系(用#include指令):point.cpp包含point.h,point.cpp包含line.h,line.h包含point.h。那么如下的point.h文件缺少什么语句,请补充完整。//Point类的声明,point.h#ifndef_POINT_H_#define_POINT_H_classPoint{...};#endif(5)下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回false。请在横线处填上适当内容,实现该函数。boolfun(char*str){inti=0,j=0;while(str[j])j++;for(j--;ij&&str[i]==str[j];i++,j--);returni=j;}(6)请将下列程序补充完整,使得输出结果为“DestructorDerivedDestructorBase”。#includeiostreamusingnamespacestd;classBase{public:virtual~Base(){cout“DestructorBase”endl;}};classDerived:publicBase{public:~Derived(){cout“DestructorDerived”endl;}};voidmain(){Base*pBase=newDerived;deletepBase;}(7)如有下列程序:#includeiostreamusingnamespacestd;classDemo{public:Demo(){coutdefaultconstructor\n;}Demo(constDemo&x){coutcopyconstructor\n;}};DemouserCode(Demob){Democ(b);returnc;}voidmain(){Demoa,d;coutcallinguserCode()\n;d=userCode(a);}执行上面的程序的过程中,构造函数Demo()和Demo(constDemo&x)被调用的次数分别是2和3次。三、程序题(1)程序改错每个注释“//ERROR”所在的一行语句存在错误。请改正这些错误,使程序的输出结果为:00:00:0001:37:19注意:只需修改注释“//ERROR”所在的那一行语句,不要改动程序中的其他内容。#includeiostream#includeiomanipusingnamespacestd;classStopWatch//秒表类{inthours;//小时intminutes;//分钟intseconds;//秒public:StopWatch():hours(0),minutes(0),seconds(0){}voidreset(){hours=minutes=seconds=0;}//前进1秒StopWatch&operator++()//ERROR①{if(seconds==60)//ERROR②{seconds=0;if(++minutes==60){minutes=0;++hours;}}return*this;}friendvoidshow(StopWatch);};voidshow(StopWatchwatch){coutsetfill('*');//ERROR③coutsetw(2)watch.hours':'setw(2)watch.minutes':'setw(2)watch.secondsendl;}intmain(){StopWatchsw;show(sw);for(inti=0;i5839;i++)sw++;show(sw);return0;}解答:①:StopWatch&operator++(int)(4分)②:if(++seconds==60)(3分)③:coutsetfill('0');(3分)(2)语句填空下面的程序设计了一个宠物类,请你在空行上填入
本文标题:C++面向对象程序设计练习题
链接地址:https://www.777doc.com/doc-2904406 .html