2023年面向对象程序设计离线作业答案_第1页
2023年面向对象程序设计离线作业答案_第2页
2023年面向对象程序设计离线作业答案_第3页
2023年面向对象程序设计离线作业答案_第4页
2023年面向对象程序设计离线作业答案_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学远程教育学院

《面向对象程序设计》课程作业答案第2章下面的注释(它在C++风格的单行注释中套入了类似于C的注释)是否有效。//thisisastrange/*waytodoacomment*/答:有效以下这个简短的C++程序不也许编译通过,为什么?#include<iostream>usingnamespacestd;intmain(){inta,b,c;cout<<nEntertwonumbers:H;cin>>a»b;c=sum(a,b);cout<<nsumis:H«c;return0;)sum(inta,intb){returna+b;}答:不能潼sum使用前必须声明问题。(1)以下两个函数原型是否等价:floatfun(inta,f1oatb,char*c);悌三章:[3.7]在下面有关对构造函数的描述中,对的的是(B)。A.构造函数可以带有返回值B.构造函数的名字与类名完全相同C.构造函数必须带有参数D.构造函数必须定义,不能默认【3.8】在声明类时,下面的说法对的的是(C)oA.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是registerC.private>public>protected可以按任意顺序出现D.没有用private>pub1ic>protected定义的数据成员是公有成员[3.9]在下面有关析构函数特性的描述中,对的的是(C)。A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型D.析构函数可以有一个或多个参数[3.10]构造函数是在(B)时被执行的。A.程序编译B.创建对象C.创建类D.程序装人内存[3,11]在下面有关静态成员函数的描述中,对的的是(B)。A.在静态成员函数中可以使用this指针B.在建立对象前,就可认为静态数据成员赋值C.静态成员函数在类外定义时,要用static前缀D.静态成员函数只能在类外定义)o[3,12]在下面有关友元函数的描述中,对的的说法是(AA.友元函数是独立于当前类的外部函数)oB.一个友元函数不能同时定义为两个类的友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加关键字friend[3.13]友元的作用之一是(A)。A.提高程序的运营效率B.加强类的封装性C.实现数据的隐藏性D.增长成员函数的种类[3,14]以下程序运营的结果是(B)。#include<iostream>usingnamespacestd;c1assB{pub1ic:oB(){}«B(inti,intj){x=i;产j;ovoidprintb(){cout«x<<n/,<<y«end1;private:4ntx,y;};c1assA{public:A()

°{}A(intI,intj);voidprinta();private:oBc;);A::A(inti,intj):c(ij)()voidA::printa(){c.printb();)intmain(){Aa(7,8);oa.printa();^return0;d.d.d.}A.8,9B.7,8C.5,6d.9,10[3.15]以下程序的运营结果是(A)。#inc1ude<iostream>usingnamespacestd;c1assA{public:voidset(inti,intj){x=i;°y=j;。}intget_y(){returny;private:。intx,y;);classbox{public:voidset(intl,intw,ints,intp)o{length=l;3width=w;abe1.set(s,p);6)intget_area(){return1ength*width;°}private:oint1ength,width;Alabel;}:intmain(){boxb;b.set(4,6,1,20);cout«b.get_area()«endl;return0;A.24B.4C.20D.6.16]以下程序的运营结果是(B)。#include<iostream>usingnamespacestd;classSamp1e{publie:Sample(inti,intj){x=i;°y=j;)ovoiddisp(){cout«"displH«end1;6}voiddisp()const。(cout«ndisp2yvend1;°}private:intx,y;};intmain(){constSamplea(1,2);a.disp();return0;A.disp1B.disp2C.displdisp2D.程序编译犯错[3,17]以下程序的运营结果是(B)0#include<iostream>usingnamespacestd;classR(publie:oR(intrl,intr2)。{Rl=rl;。R2=r2;)bvoidprint();voidprint()const;private:intR1,R2;);voidR::print(){cout«Rl«\n«R2«endl;)voidR::print()const{cout<<R1«H,n<<R2«end1;}intmain(){Ra(6,8);constRb(56,88);b.print();return0;A.6,8B.56,88C.0,0D.8,6【3.18]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classtoy{publie:toy(intq,intp){quan=q;price=p;。}ointget_quan()。{returnquan;6}。intgetprice()。{returnprice;}private:intquan,price;);intmain(){toyop[3][2]={toy”20),toy(30,48),。toy(50,68),toy(70,80),toy(90,16),toy(11,120),);for(inti=0;i<3;i++)(cout«op[i][0].get_quan()«H,n;cout«op[iJ[OJ.get_price()«n\nH;cout<<op[i][1].get_quan()«”J;cout<<op[i][l].get_price()<<n\nn}cout«end1;return0;)10,2030,4850,6870,8090,1611,120[3.19]写出下面程序的运营结果。#include<iostream>usingnamespacestd;c1assexample{public:oexamp1e(intn){i=n;。cout<<HConstructing\nH;。)o〜examp1e(){cout<<nDestructing\nn;°intget_i()。{returni;)private:“nti;);intsqr_it(exampleo){returno.get—i()*o・get_i();)intmain(){examplex(10);cout«x.get—i()<<endl;cout<<sqr_it(x)<<end1;return0;}10100DestructingDestructing下面程序的运营结果。#include<iostream>usingnamespacestd;classaClass{pub1ic:oaClass(){tota1++;6}〜aClass()o{total-;“ntgettotal(){returntota1;private:ostaticinttota1;卜intaC1ass::total=0;intmain(){aClassol,o2,o3;cout«o1.gettotal()«"objectsinexistence\nH;aClass*p;p=newaClass;if(1p){cout«HAllocationerror\nn;return1;)cout«o1.gettotal();cout<<Hobjectsinexistenceafterallocation\nn;deletep;cout<<ol.gettota1();cout<<nobjectsinexistenceafterde1etion\nn;

floatfun(int,float,char*);等价(2)以下两个函数的第一行是否等价:floatfun(inta,floatb,char*c);floatfun(int,f1oat,char*);答:等价【2.6】下列语句中错误的是(D)oA.int*p=newint(10);B.int*p=newint[10];C.int*p=newint;D.int*p=newint[40](0);[2.7]假设已有定义“constchar*constname=〃chen〃;”下面的语句中对的的是(D)oA.name[3B.name=n1in”;C.name=newchar[5];D.cout«name[3];[2.8]假设已有定义“char*constname二〃chen〃;”下面的语句中对的的是(A)0A.name[3]='qB.name="1in'1;C.name=newehar[5];D.name=newchar('q');[2.9]假设已有定义“constchar*name=〃chen〃;”下面的语句中错误的是(A)oA.name[3]='q';B.name=n1in”;C.name=newchar[5];D.name=newchar(“);【2.10】重载函数在调用时选择的依据中,(B)是错误的。A.函数名字C.参数个数B.A.函数名字C.参数个数return0;3objectsinexistence4objectsinexistenceafterailocation3objectsinexistenceafterdeletion[3.21]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classtest{public:。test();〜tesprivate:“nti;};test::test(){i=25;for(intctr=0;ctr<10;ctr++){cout«nCountingatn<<ctr«H\n”})testanObject;intmain(){return0;CountingatOCountinga11Countingat2Countingat3Countingat4Countingat5Countingat6Countingat7Countingat8Countingat9[3.22]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classA{inta,b;public:oA()。{a=0;ob=0;cout<<nDefaultconstruetorcalledAnH;A(inti,intj)“a=i;cout«nConstructor:a=n<<a«n,b=n<<b<<end1;intmain(){Aa[3];Ab[3]={A(l,2),A(3,4),A(5,6)};return0;}Defaultconstructorcal1ed.DefauItconstruetorcalled.Defaultconstruetorca1led.Constructor:a=l,b=2Constructor:a=3,b=4Construetor:a=5,b=6[3.23]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classTest{

private:。intva1;public:。Test(){cout<<"default.H«endl;°}Test(intn){val=n;cout<<nCon.”<Vendl;}oTest(constTest&t)。{val=t.va1;ocout<<nCopycon.H«endl;6)};intmain(){Testtl(6);Testt2=t1;Testt3;t3=tl;return0;)Con.Copycon.Default.写出下面程序的运营结果。#inc1ude<iostream>usingnamespacestd;classN(private:ointA;。staticintB;pub1ic:N(inta){A=a;B+=a;staticvoidfl(Nm);voidN::fl(Nm){cout«HA=n<<m.A«end1;coutV<"BVB«end1;)intN::B=0;intmain(){NP⑸,Q(9);N::fl(P);N::f1(Q);return0;)A=5B=14A=9B=14[3.25]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classM{“ntx,y;public:M(){x=y=0;M(intijntj){x=i;y刁;voidcopy(M*m);voidsetxy(inti,intj){x=i;y二j;}woidprint(){cout«x<<n/«y«endl;}};voidM::copy(M*m){x=m->x;y=m—>y;)voidfun(Mm1,M*m2){ml.setxy(12,15);m2->setxy(22,25);}intmain(){Mp(5,7),q;q-copy(&p);fun(p,&q);p.print();q.print();return0;5,722,25[3.26]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classM{intA;staticintB;publie:M(inta)“A=a;°B+=a;cout<<"Constructingn«end1;^staticvoidf1(Mm);b~M(){cout<<nDestructing\nn;voidM::f1(Mm){cout<<nA=H«m.A«endl;cout<<nB=n«B<<endl;intM::B=O;intmain(){Mp(5),Q(10);M::fl(p);M::fl(Q);return0;)ConstructingConstructingA=5B=15DestructingA=10B=15DestructingDestructingDestructing.27]指出下列程序中的错误,并说明为什么。#inc1ude<iostream>usingnamespacestd;classStudent{public:。voidprintStu();private:。charname[10];intage;afloataver;intmain(){Studentp1,p2,p3;pl.age=30;return0;}age为private不能付值[3.28]指出下列程序中的错误,并说明为什么。#include<iostream>usingnamespacestd;classStudent{intsno;Antage;ovoidprintStu();voidsetSno(intd););voidprintStu();{cout<<n\nSnoisn<<sno«n,H;cout<<nageisn«age«n.n<<endl;)voidsetSno(ints)sno=s;voidsetAge(inta){age=a;)intmain(){Studentlin;lin.setSno(20231);lin.setAge(20);lin.printStu();}'classStudent'不存在一个叫'setAge7的方式【3.29】指出下列程序中的错误,并说明为什么。#include<iostream>usingnamespacestd;classPoint{public:intx,y;private:oPiont(){x=l;y=2;);intmain(){Pointcpoint;cpoint.x=2;return0;构筑函数错误[2.11]在(A)情况下适宜采用内联函数。A.函数代码小,频繁调用B.函数代码多,频繁调用C.函数体具有递归语句D.函数体具有循环语句[2.12]下列描述中,(C)是错误的。A.内联函数重要解决程序的运营效率问题B.内联函数的定义必须出现在内联函数第一次被调用之前C.内联函数中可以涉及各种语句D.对内联函数不可以进行异常接口声明[2,13]在C++中,关于下列设立默认参数值的描述中,(B)是对的的。A.不允许设立默认参数值B.在指定了默认值的参数右边,不能出现没有指定默认值的参数C.只能在函数的定义性声明中指定参数的默认值D.设立默认参数值时,必须所有都设立[2.14]下面的类型声明中对的是(D)。A.int&a[4];B.int&*p;C.int&&q;D.inti,*p=&i;[2.15]下面有关重载函数的说法中对的的是(C)0A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同[2.16]关于new运算符的下列描述中,(D)是错误的。A,它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C,使用它创建对象时要调用构造函数

[3.30]下面是一个计算器类的定义,请完毕该类成员函数的实现。classcounter{public:counter(intnumber);〃给原值加〃给原值加1//给原值减1//取得计数器值//显示计数〃给原值加1//给原值减1〃给原值加1//给原值减1//取得计数器值//显示计数Antgetvalue();ointprint();private:“ntvalue;};counter::counter(intnumber){value=number;)voidcounter::increment(intn){value+=n;)voidcounter::decrement(){value—;}intcounter::getvalue(){returnvalue;)voidcounter::print(){printf(n%d\n",getva1ue());

intmain()inta,b;scanf(M%d%d”,&a,&b);counterct(a);ct.increment(b);ct.decrement();return0;[3.31]根据注释语句的提醒,实现类Date的成员函数。#inc1ude<iostream>usingnamespacestd;classDate{public:〃显示日期//设立日的值//设立月的值〃显示日期//设立日的值//设立月的值//设立年的值evoidsetMonth(intm);evoidsetYear(inty);private:intday,month,year;}intDate::setyear(inty)year=y;returnyear;intDate::setmonth(intm)month=m;returnmonth;}intDate::setday(intd)(day二d;returnday;)VoidDate::printdate(){cout«year«H.n<<month<<H,H<<day«end1;);intmain(){DatetestDay;testDay.setDay(5);testDay.setMonth(l0);testDay.setYear(2023);testDay.printDate();return0;[3,32]建立类cy1inder,cyUnder的构造函数被传递了两个double值,分别表达圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。#include<iostream>usingnamespacestd;#definePI3.14159classCylinderpublic:Cylinder(doub1eradius,doub1eheight):radius(radius),height(height),volume(PI*radius*radius*height){total_vo1+=volume;)doub1evol()const;friendvoidgetParas(doub1e&radius,double&height,double&vol,double&total_vo1,constCylinder&obj);private:doubleradius;//radiusdoubleheight;//heightdoublevolume;//vo1umeofcurrentobjectstaticdoubletotal_vol;//totalvolume};doubleCylinder::total_vol=0;doubleCylinder::vo1()constreturnthis—>vo1ume;voidgetParas(doub1e&radius,double&height,double&vol,double&total_vo1,constCylinder&obj){//getprivatememberofCy1inderradius=obj.radius;height=obj.height;vol=obj.volume;total_vol=obj.total_vo1;}intmain()(doublerd=0,hg=0,vo1=0,total_vol=0;Cylindercldl(2,3.5),c1d_2(5.2,7),cld_3(3.9,4.0);//3objectsgetParas(rd,hg,vol,total_vol,cld_3);cout<<HCy1inder3:"<<end1;cout<</zradius:n<<rd<<endl;cout<<z/height:〃<<hg<<endl;cout<<z/volume:〃<Xvo1<<endl;cout〈<〃Tota1Volume:n<<tota1_vol<<endl;system(〃pause〃);return0;}[3,33]构建一个类book,其中具有两个私有数据成员qu和price,将qu初始化为1〜5,将price初始化为qu的10倍,建立一个有5个元素的数组对象。显示每个对象数组元素的qu*price值。#inc1ude<iostream.h>classbookintqu,price;pub1ic:book(intq)(qu=q;price=10*q;)intget—qu(){returnqu;}intget_price(){returnprice;}};voidmain(){bookobj[5]={1,2,3,4,5};for(inti=0;i<5;i++){cout〃数组对象〃〈”的qu*price值为:〃get_qu()*obj[i].getprice()<<end1;}}【3.34】修改习题3.33,通过对象指针访问对象数组,使程序以相反的顺序显示每个对象数组元素的qu*price值。ttinclude<iostream.h>c1assbook(intqu,price;public:book(intq)qu=q;price=10*q;}intget_qu(){returnqu;)intgetprice(){returnprice;}};voidmain(){bookobj[5]={1,2,3,4,5};book*p;p=&obj[4];for(inti=0;i<5;i++){cou〈〃数组对象i+IV〈〃的qu*price值为:n<<p—>get_qu()*p->get_price()<<endl;P一;}[3,35]构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。构造函数含3个参数:字符数组na口及q、P。当定义Stock的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、priceo未设立第2和第3个参数时,quan的值为1000,price的值为8.98o成员函数print没有形参,需使用this指针,显示对象数据成员的内容。假设类Stock第1个对象的三个参数分别为:

“600001”,3000和5.67,第2个对象的第1个数据成员的值是“600001”,第2和第3个数据成员的值取默认值。规定编写程序分别显示这两个对象数据成员的值。ftinclude<iostream>//constunsignedMAX_LEN=256;classStock{public://这里用的初始化形参列表Stock(charna[],intq=1000,doublep=8.98):stockcode(na),quan(q),price(p)()voidprint(void){std::cout<<this->stockcode<〈〃〃<<quan<<〃"<<price<<std::end1;)private:char*stockcode;//或改为charstockcode[MAX_LEN];//其中MAX_LEN定义在前为一常量:constunsignedMAX_LEN=256;intquan;doubleprice;};//mainfunctionintmain(intargc,char*argv口)charszTestString[]=〃600001〃;//It'sterminatedwithintiTestInteger=3000;5.67;5.67;StockstObjl(szTestString,iTestlnteger,dTestDouble);StockstObj2(szTestString);st0bjl.print();stObj2.print();return0;}//endmai[3.36]编写一个程序,已有若干学生的数据,涉及学号、姓名、成绩,规定输出这些学生的数据并计算出学生人数和平均成绩(规定将学生人数和总成绩用静态数据成员表达)。#include<stdio.h>#include<string.h>#defineN4classstudent(intno;charname[10];intdegl;//语文成绩intdeg2;//数学成绩intdeg3;//英语成绩staticintsuml;//语文总分staticintsum2;//数学总分staticintsum3;//英语总分public:student(intn,charna[],intdl,intd2,intd3)no=n;strcpy(name,na);degl=dl;deg2=d2;deg3=d3;suml+=deg1;sum2+=deg2;sum3+=deg3;}doubleavgl(){return(suml*1.0)/N;}doubleavg2(){return(sum2*l.0)/N;}doubleavg3(){return(sum31.0)/N;}voiddisp()(printf(〃%4d%10s%6d%6d%6d\nn,no,name,deg1,deg2,deg3);));intstudent::suml=0;ntstudent::sum2=0;intstudent::sum3=0;voidmain()(doub1e(student::*fp)();//定义成员函数指针students1(1,HLiz/,67,89,90);students2(2,nMa〃,67,89,90);students3(3,"Zheng〃,67,89,90);students4(4,〃Chen",67,89,90);printf("输出结果\n");disp();disp();3.disp();D.使用它创建对象数组时必须指定初始值[2,17]关于delete运算符的下列描述中,(C)是错误的。A.它必须用于new返回的指针B.使用它删除对象时要调用析构函数C.对一个指针可以使用多次该运算符D.指针名前只有一对方括号符号,不管所删除数组的维数[2.18]写出下列程序的运营结果。#include<iostream>usingnamespacestd;inti=15;intmain(){inti;i=100;::i=i+l;cout<<::i«end1;return0;)答:101[2.19]写出下列程序的运营结果。#include<iostream>usingnamespacestd;voidf(int&m,intn){inttemp;temp=m;m=n;n=temp;s4.disp();fp=student::avg1;printf(/z语文平均分有%g\n〃,(s1.*fp)());fp=student::avg2;Printf("数学平均分有%g\n",(sl.*fp)());fp=student::avg3;printf(n英语平均分有%g\n〃,(s1.*fp)());)悌四章:[4.8]使用派中类的重要因素是(A)oA.提高代码的可重用性B.提高程序的运营效率C.加强类的封装性D.实现数据的隐藏[4.9]假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的对的写法是(c)。clasederived::studentprivate{•••);c1asederived::studentpub1ic{…};clasederived::privatestudent{•••);c1asederived::publicstudent{…};[4,10]在多继承构造函数定义中,几个基类构造函数用(c)分隔。A.:B.;C・,D.::[4.11]设立虚基类的目的是(b)。A.简化程序B.消除二义性C.提高运营效率D.减少目的代码.12]写出下面程序的运营结果。#include<iostream>usingnamespacestd;c1assBl{public:Bl(inti)“bl=i;cout〈("ConstruetorBl.n«endl;)voidPrint(){cout«bl«end1;}private:intbl;);classB2{public:B2(inti)。{b2=i;ocout«nConstructorB2.”«end1;°}ovoidPrint(){cout«b2«endl;)private:ointb2;};classA:pub1icB2,publicB1{publie:A(inti,intj,int1);voidPrint();private:inta;):A::A(inti,intj,int1):B1(i),B2(j){a=I;cout<<”ConstructorA.n«endl;)voidA::Print(){B1::Print();B2::Print();cout<<a«end1;)intmain(){Aaa(3,2,1);aa.Print();return0;}321下面程序的运营结果。#inc1ude<iostream>usingnamespacestd;classMain{protected:char*mainfood;public:oMain(char*name)。{mainfood=name;}};classSub{protected:ochar*subfood;public:Sub(char*name){subfood=name;)};classMenu:publicMain,publicSub{public:Menu(char*m,char*s):Main(m),Sub(s)°{}voidshow();};voidMenu::show(){cout<<“主食="<vmainfood«endl;cout<<“副食="<<subfood<<endl;intmain(){Menum(Hbread","steak”);m.show();return0;)主食二bread副食=stea【4.14]写出下面程序的运营结果。#inc1ude<iostream>usingnamespacestd;c1assA{private:inta;public:A()“a=0;}oA(inti)°{a=i;}ovoidPrint()。{cout<<a<<n,n;};classB:pub1icA{private:“ntbl,b2;publie:B()o{bl=0;b2=0;。}B(inti){bl=i;b2=0;)B(inti,intj,intk):A(i),bl(j),b2(k){}ovoidPrint(){A::Print();ocout«bl«H,'«b2«end1;。}};intmain(){Bobl,ob2(l),ob3(3,6,9);obi.Print();ob2.Print();ob3.Print();return0;}0,0,00,1,03,6,9下面程序的运营结果。#inc1ude<iostream>usingnamespacestd;classB1{intbl;publie:B1(inti)o{b1=i;coutV<"constructorB1.H«i«endl;)voidprint()。{cout<<b1«endl;)};classB2{intb2;publie:oB2(inti)e{b2=i;cout<<"constructorB2/<<i<<endl;woidprint()“cout«b2«endl;));classB3{intb3;publie:B3(inti){b3=i;。cout«nconstructorB3.n«i«endl;)intgetb3(){returnb3;));classA:publicB2,publicB1{inta;B3bb;public:A(inti,intj,intk,int1):Bl(i),B2(j),bb(k)“a=l;cout«nconstructorA.n«l«end1;)ovoidprint(){Bl::print();oB2::print();cout<<ab.getb3()<<end1;。}};intmain(){Aaa(l,2,3,4);aa.print();return0;ConstructorB2.ConstructorB1.1ConstructorB3.3ConstructorA.4124,3[4.16]写出下面程序的运营结果。#inc1ude<iostream>usingnamespacestd;classA{public:A(inti,intj){x=i;。y=j;。}intsum(){returnx+y;}private:intx,y;};c1assB:publicA{public:B(inti9intj9intk,int1);intsum(){returnw+h;private:“ntw,h;);B::B(inti,intj,intk,int1):A(i,j){w=k;h=1;)voidf(A&s){cout<<s.sum()<<end1;)intmain(){Bob(l,3,5,7);f(ob);return0;}4写出下面程序的运营结果。#include<iostream>usingnamespacestd;classA{inta,b;pub1ic:A(inti,intj)。{a=i;b=j;intmain(){inta=5,b=10;f(a,b);cout<<a<<"n<<b<<end1;return0;}答:1010[2.20]分析下面程序的输出结果。#include<iostream>usingnamespacestd;int&f(int&i){i+=10;returni;)intmain(){intk=0;int&m=f(k);cout«k«endl;m=20;cout«k<<endl;return0;}答:1020voidMove(intx,inty){a+=x;b+=y;voidShow()。{cout<<H(n«a«n,n«b«H)H«endl;};classB:privateA{Antx,y;publie:°B(inti,intj,intk,intl):A(i,j)“x=k;y=1;)ovoidShow()。{cout<<x«,7,«y«end1;woidfun()o{Move(3,5);VOidfl(){A::Show();));intmain(){Ae(l,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();return0;)5,6(6,9)[4.18]写出下面程序的运营结果。#include<iostream>usingnamespacestd;classbase1{public:4)asel()“cout<<nclassbase!n<<end1;°}};classbase2{pub1ic:base2()。{cout«"classbase2n«endl;)c1ass1evel1:publicbase2,virtualpublicbase1{public:^levellQ^{cout«nclass1eveHH«endl;));class1evel2:publicbase2,virtua1pub1icbase1{public:1eve12(){cout«nc1ass1eve12n<<endl;};classtopleve1:publicleve1Lvirtualpublic1eve12{publie:pleve1()。{cout<<nc1asstopieve1n«end1;。}intmain(){top1eve1obj;return0;}classbaselc1assbase2c1assleve12classbase2c1ass1eveilclasstopleve1[4.21]已有类Time和Date,规定设H'个派生类Birthtime,它继承类Time和Date,并且增长一个数据成员ChiIdname用于表达小孩的名字,同时设计主程序显示一个小孩的出生时间和名字。classTime{public:Time(inth,intm,ints)。{hours=h;minutes=m;seconds=s;}voiddisplay(){coutV<”出生时间:”《hours〈<"时"v<minutes<<“分”<vsecondsV<"秒"<<end1;)protected:“nthours,minutes,seconds;):classDate{public:oDate(intm,intd,inty)“month=m;day=d;year=y;°}voiddisplay()。{coutv<”出生年月:n«year<<“年”《month<<”月n«day<<“日"vVendl;protected:intmonth,day,year;};classBirthtime:pub1icTime,pub1icDate(publie:Birthtime(char*Cn,intyy,intmm,intdd,inthh,intmintJntss):Time(hh,mint,ss),Date(mm,dd,yy)(strepy(Childname,Cn);}voiddisplay()(coutvv"姓名:”<<Childname«endl;Date::display();Time::display();}protected:charChildname[20];}intmain()(Birthtimeyx("晓凤二2023,12,13,14,20,30);yx.display();return0;【4.22]编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。规定将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。#include<iostream>ttinclude<string>usingnamespacestd;classperson(private:intno;stringname;public:voidinput(){cout«"请输入编号和姓名东九”}voiddisplay()(cout〈<“编号余九”<<no<<endl;});classstudent:pub1ic;cin>>no>>name;cout<<u姓名*九”<<name<<endl;personprivate:intbh,score;public:voidget(){input();cout<<“请输入班号和成绩和/';cin»bh»score;}voidshow(){display();cout<<"班号"<<bh〈Vend1;cout<<“成绩v<<score<<endl;));classteacher:publicperson{private:stringzc,bm;public:voidget()(input();cout<<“请输入职称和部门有“;cin>>zc>>bm;)voidshow(){disp1ay();cout<<“职称”<<zc<<end1;cout〈<"部门"<<bm<<endl;));intmain(){students;teachert;show();get();t.show();return0;第五章:[5.7]有关运算符重载对的的描述是(D)。C++语言允许在重载运算符时改变运算符的操作个数C++语言允许在重载运算符时改变运算符的优先级C++语言允许在重载运算符时改变运算符的结合性C++语言允许在重载运算符时改变运算符本来的功能友元函数重载的运算符是(A)oA.+B.=C.口D.->关于虚函数,对的的描述是(A)0A.构造函数不能是虚函数B.析构函数不能是虚函数C.虚函数可以是友元函数D.虚函数可以是静态成员函数[5.10]派生类中虚函数原型的(D)oA.函数类型可以与基类中虚函数的原型不同B.参数个数可以与基类中虚函数的原型不同C.参数类型可以与基类中虚函数的原型不同D.以上都不对[5.11]假如在基类中将show声明为不带返回值的纯虚函数,对的的写法是(C)oA.virtua1show()=0;virtualvoidshow();virtua1voidshow()=0;voidshow()=0virtual;【5.12】下列关于纯虚函数与抽象类的描述中,错误的是(C)0A.纯虚函数是一种特殊的函数,它允许没有具体的实现B.抽象类是指具有纯虚函数的类C.一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出[5.13]下面的程序段中虚函数被重新定义的方法对的吗?为什么?classbase{pub1ic:ovirtualintf(inta)=0;};classderived:pub1icbase{public:intf(inta,intb)“returna*b;°)};对的下列程序的运营结果。#inc1ude<iostream>usingnamespacestd;classA{说明可以使用const替代#define以消除#define的不安全性。答:例如#include<iostream.h>#defineA2+4ttdefineBA*3voidmain(){cout<<B<<endl;)上面程序的运营结果是14而不是18慕但很容易被认为是18。用c。nst替代#define就能得到对的结果藉从而消除了#define的不安全性。#inc1ude<iostream.h>constA=2+4;constB=A*3;voidmain()(cout<<B<<end1;)运营结果为18。【2.22]编写一个C++风格的程序,用动态分派空间的方法计算Fibonacci数列的前20项,并存储到动态分派的空间中。#inc1ude<iostream>usingnamespacestd;intmain()public:oA(inti):x(i)6{}A(){x=0;6}。friendAoperator++(Aa);ofriendAoperator--(A&a);voidprint();private:。intx;);Aoperator++(Aa){++a.x;returna;)Aoperator—(A&a){-a.x;returna;)voidA::print(){cout<<x«end1;)intmain(){Aa(7);++a;a.print();-a;a.print();return0;)76[5.15]写出下列程序的运营结果。#include<iostream>usingnamespacestd;classWords{public:Words(char*s){str=newchar[str1en(s)+1];匕strcpy(str,s);len=strlen(s);6}voiddisp();charoperator[](intn);//定义下标运算符”[『重载函数private:。int1en;ochar*str;};charWords::operator[](intn){if(n<0||n>1en-1)〃数组的边界检查{coutvv”数组下标超界!\n”;return'}eIsereturn*(str+n);)voidWords::disp(){cout«str«end1;)intmain(){Wordsword(HThisisC++book.”);word.disp();coutV〈”第1个字符:、cout<<word[0]<<end1;//word[10]被解释为word.operator[](10)cout«nM16个字符:n;cout«word[15]«end1;cout«H第26个字符:";cout<<word[25]<<end1;return0;)ThisisC++book.第1个字符藉T第16个字符:第26个字符数据下标超界[5.16]写出下列程序的运营结果。#include<iostream>usingnamespacestd;classLength{ointmeter;pub1ic:ength(intm){meter=m;operatordouble(){return(L0*meter/1000););intmain(){Lengtha(1500);doublem=float(a);coutv<"m=千米"<<end1;return0;}M=1.5千米[5.17]编一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加和相减,规定第一个二维数组的值由构造函数设立,另一个二维数组的值由键盘输入。ftinclude<iostream.h>classTow_arr{//定义类Tow_arrprotected:inta[2][3];public:Tow_arr(int,int,int,int,int,int);//构造函数Tow_arr();〃无参构造函数voidSet();〃设立二维数组数据的函数voidShow();//显示二维数组数据的函数Tow_arroperator+(Tow_arr);〃成员函数重载运算符“+”Towartoperator-(Tow_arr);〃成员函数重载运算符“-”);//构造函数完整Tow_arr::Tow_arr(inta1,inta2,inta3,inta4,inta5,inta6){a[0][0]=al;a[0][1]=a2;a[0][2]=a3;a[1][0]=a4;a[l][1]=a5;a[1][2]=a6;}Tow—arr::Tow_arr()//无参构造函数完整(for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=0;}voidTow_arr::Set()〃设立二维数组数据的函数完整{cout<<”数入2X3个整数:"〈〈endl;for(inti=0;i<2;i++)for(intj=0;j<3;j++)cin»a[i][j];}voidTowarr::Show()〃显示二维数组数据的函数完整{cout<〈〃二维数组内的数据是M«end1;for(inti=0;i<2;i++)for(intj=0;j<3;j++)cout<<a[i][j]<<zz;cout<<,\n';)}}〃成员函数重载运算符“+”完整Tow_arrTow_arr::operator+(Tow_arradd2){Tow_arrtemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=a[i][j]+add2.a[i][j];returntemp;)〃成员函数重载运算符“-”完整Tow_arrTow_arr::operator—(Tow_arradd2){Tow_arrtemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=a[i][j]—add2.a[i][j];returntemp;}voidmain(){Tow_arrobja(11,22,33,44,55,66);〃定义对象objaTowarrobjb,objc;//定义对象««/z0bjaz/;«/z0bjaz/;objb,objcobjb.Set();〃给对象objb设立数据couto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论