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

付费下载

下载本文档

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

文档简介

浙江大学远程教育学院《面对对象程序设计》课程作业答案第2章【2.3】测试下面的注释(它在C++格调的单行注释中套入了类似于C的注释)是否有效。//thisisastrange/*waytodoacomment*/答:有效【2.4】如下这个简短的C++程序不也许编译通过,为何?#include<iostream>usingnamespacestd;intmain(){inta,b,c;cout<<"Entertwonumbers:";cin>>a>>b;c=sum(a,b);cout<<"sumis:"<<c;return0;}sum(inta,intb){returna+b;}答:不能sum使用前必须申明【2.5】回答下列问题。(1)如下两个函数原型是否等价:floatfun(inta,floatb,char*c);floatfun(int,float,char*);等价(2)如下两个函数的第一行是否等价:floatfun(inta,floatb,char*c);floatfun(int,float,char*);答:等价【2.6】下列语句中错误的是(D)。A.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)。A.name[3]='a';B.name="lin";C.name=newchar[5];D.cout<<name[3];【2.8】假设已经有定义“char*constname="chen";”下面的语句中正确的是(A)。A.name[3]='q';B.name="lin";C.name=newchar[5];D.name=newchar('q');【2.9】假设已经有定义“constchar*name="chen";”下面的语句中错误的是(A)。A.name[3]='q';B.name="lin";C.name=newchar[5];D.name=newchar('q');【2.10】重载函数在调用时选择的依据中,(B)是错误的。A.函数名字B.函数的返回类型C.参数个数D.参数的类型【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)。A.重载函数必须具备不一样的返回值类型B.重载函数形参个数必须不一样C.重载函数必须有不一样的形参列表D.重载函数名能够不一样【2.16】有关new运算符的下列描述中,(D)是错误的。A,它能够用来动态创建对象和对象数组B.使用它创建的对象或对象数组能够使用运算符delete删除C.使用它创建对象时要调用结构函数D.使用它创建对象数组时必须指定初始值【2.17】有关delete运算符的下列描述中,(C)是错误的。A.它必须用于new返回的指针B.使用它删除对象时要调用析构函数C.对一个指针能够使用数次该运算符D.指针名前只有一对方括号符号,无论所删除数组的维数【2.18】写出下列程序的运行成果。#include<iostream>usingnamespacestd;inti=15;intmain(){inti;i=100;::i=i+1;cout<<::i<<endl;return0;}答:101【2.19】写出下列程序的运行成果。#include<iostream>usingnamespacestd;voidf(int&m,intn){inttemp;temp=m;m=n;n=temp;}intmain(){inta=5,b=10;f(a,b);cout<<a<<""<<b<<endl;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;}答:1020【2.21】举例阐明能够使用const替代#define以消除#define的不安全性。答:例如#include<iostream.h>#defineA2+4#defineBA*3voidmain(){cout<<B<<endl;}上面程序的运行成果是14而不是18但很轻易被以为是18。用const替代#define就能得到正确成果从而消除了#define的不安全性。#include<iostream.h>constA=2+4;constB=A*3;voidmain(){cout<<B<<endl;}运行成果为18。【2.22】编写一个C++格调的程序,用动态分派空间的措施计算Fibonacci数列的前20项,并存储到动态分派的空间中。#include<iostream>usingnamespacestd;intmain(){inti;int*p;p=newint[20];p[0]=0;p[1]=1;cout<<*p<<""<<*(p+1)<<"";for(i=2;i<20;i++){p[i]=p[i-2]+p[i-1];cout<<*(p+i)<<"";}deletep;return0;}【2.23】编写一个C++格调的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()3次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,能够使用标准库函数sqrt())。#include<iostream.h>#include<math.h>intsroot(intx){return(int)sqrt(x);}floatsroot(floatx){return(float)sqrt(x);}doublesroot(doublex){return(double)sqrt(x);}voidmain()//test{inti=4;intresultI=sroot(i);floatj=4.0;floatresultJ=sroot(j);doublek=4.0000;doubleresultK=sroot(k);}【2.24】编写一个C++格调的程序,处理百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?#include<iostream>usingnamespacestd;intmain(){inti,j,k;intsum=0;for(i=0;i<=100;i++)for(j=0;j<=50;j++)for(k=0;k<=20;k++){if(i*1+2*j+5*k==100)sum++;}cout<<"总数为"<<sum<<endl;}【2.25】编写一个C++格调的程序,输入两个整数,将它们按由小到大的次序输出。要求使用变量的引用。#include<iostream>usingnamespacestd;voidswap(int&x,int&y){inttemp=x;x=y;y=temp;}intmain(){inta,b;cin>>a>>b;if(a>b)swap(a,b);cout<<a<<b;return0;}

第三章:【3.7】在下面有关对结构函数的描述中,正确的是(B)。A.结构函数能够带有返回值B.结构函数的名字与类名完全相同C.结构函数必须带有参数D.结构函数必须定义,不能默认【3.8】在申明类时,下面的说法正确的是(C)。A.能够在类的申明中给数据组员赋初值B.数据组员的数据类型能够是registerC.private、public、protected能够按任意次序出现D.没有用private、public、protected定义的数据组员是公有组员【3.9】在下面有关析构函数特性的描述中,正确的是(C)。A.一个类中能够定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型D.析构函数能够有一个或多个参数【3.10】结构函数是在(B)时被执行的。A.程序编译B.创建对象C.创建类D.程序装人内存【3.11】在下面有关静态组员函数的描述中,正确的是(B)。A.在静态组员函数中能够使用this指针B.在建立对象前,就能够为静态数据组员赋值C.静态组员函数在类外定义时,要用static前缀D.静态组员函数只能在类外定义【3.12】在下面有关友元函数的描述中,正确的说法是〔A)。A.友元函数是独立于目前类的外部函数B.一个友元函数不能同时定义为两个类的友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加核心字friend【3.13】友元的作用之一是(A)。A.提升程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增加组员函数的种类【3.14】如下程序运行的成果是(B)。#include<iostream>usingnamespacestd;classB{public: B(){} B(inti,intj) {x=i; y=j; } voidprintb() {cout<<x<<","<<y<<endl; }private: intx,y;};classA{public: A() {} A(intI,intj); voidprinta();private: Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}intmain(){Aa(7,8); a.printa(); return0;}A.8,9B.7,8C【3.15】如下程序的运行成果是(A)。#include<iostream>usingnamespacestd;classA{public: voidset(inti,intj) {x=i; y=j; } intget_y() {returny; }private: intx,y;};classbox{public: voidset(intl,intw,ints,intp) {length=1; width=w; label.set(s,p); } intget_area() {returnlength*width; }private: intlength,width; Alabel;};intmain(){boxb;b.set(4,6,1,20);cout<<b.get_area()<<endl;return0;}A.24B.4C.20【3.16】如下程序的运行成果是(B)。#include<iostream>usingnamespacestd;classSample{public: Sample(inti,intj) {x=i; y=j; } voiddisp() {cout<<"disp1"<<endl; } voiddisp()const {cout<<"disp2"<<endl; } private: intx,y;};intmain(){constSamplea(1,2);a.disp();return0;}A.disp1B.disp2C.disp1disp2D.程序编译犯错【3.17】如下程序的运行成果是(B)。#include<iostream>usingnamespacestd;classR{public: R(intr1,intr2) {R1=r1; R2=r2; } voidprint(); voidprint()const;private: intR1,R2;};voidR::print(){cout<<R1<<","<<R2<<endl;}voidR::print()const{cout<<R1<<","<<R2<<endl;}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{public: toy(intq,intp) {quan=q; price=p; } intget_quan() {returnquan; } intget_price() {returnprice; }private: intquan,price;};intmain(){toyop[3][2]={ toy(10,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()<<",";cout<<op[i][0].get_price()<<"\n";cout<<op[i][1].get_quan()<<",";cout<<op[i][1].get_price()<<"\n";}cout<<endl;return0;}10,2030,4850,6870,8090,1611,120【3.19】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classexample{public: example(intn) {i=n; cout<<"Constructing\n"; } ~example() {cout<<"Destructing\n"; } intget_i() {returni; }private: inti;};intsqr_it(exampleo){returno.get_i()*o.get_i();}intmain(){examplex(10);cout<<x.get_i()<<endl;cout<<sqr_it(x)<<endl;return0;}10100DestructingDestructing【3.20】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classaClass{public: aClass() {total++; } ~aClass() {total--; } intgettotal() {returntotal; }private: staticinttotal;};intaClass::total=0;intmain(){aClasso1,o2,o3;cout<<o1.gettotal()<<"objectsinexistence\n";aClass*p;p=newaClass;if(!p){cout<<"Allocationerror\n";return1;}cout<<o1.gettotal();cout<<"objectsinexistenceafterallocation\n";deletep;cout<<o1.gettotal();cout<<"objectsinexistenceafterdeletion\n";return0;}3objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdeletion【3.21】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classtest{public: test(); ~test(){};private: inti;};test::test(){i=25;for(intctr=0;ctr<10;ctr++){cout<<"Countingat"<<ctr<<"\n";}}testanObject;intmain(){return0;}Countingat0Countingat1Countingat2Countingat3Countingat4Countingat5Countingat6Countingat7Countingat8Countingat9【3.22】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classA{ inta,b;public: A() {a=0; b=0; cout<<"Defaultconstructorcalled.\n"; } A(inti,intj) {a=i; b=j; cout<<"Constructor:a="<<a<<",b="<<b<<endl; }};intmain(){Aa[3];Ab[3]={A(1,2),A(3,4),A(5,6)};return0;}Defaultconstructorcalled.Defaultconstructorcalled.Defaultconstructorcalled.Constructor:a=1,b=2Constructor:a=3,b=4Constructor:a=5,b=6【3.23】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classTest{private: intval;public: Test() {cout<<"default."<<endl; } Test(intn) {val=n; cout<<"Con."<<endl; } Test(constTest&t) {val=t.val; cout<<"Copycon."<<endl; }};intmain(){Testt1(6);Testt2=t1;Testt3;t3=t1;return0;}Con.Copycon.Default.【3.24】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classN{private: intA; staticintB;public: N(inta) {A=a; B+=a; } staticvoidf1(Nm);};voidN::f1(Nm){cout<<"A="<<m.A<<endl;cout<<"B="<<B<<endl;}intN::B=0;intmain(){NP(5),Q(9);N::f1(P);N::f1(Q);return0;}A=5B=14A=9B=14【3.25】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classM{ intx,y;public: M() {x=y=0; } M(inti,intj) {x=i; y=j; } voidcopy(M*m); voidsetxy(inti,intj) {x=i; y=j; } voidprint() {cout<<x<<","<<y<<endl; }};voidM::copy(M*m){x=m->x;y=m->y;}voidfun(Mm1,M*m2){m1.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;public: M(inta) {A=a; B+=a; cout<<"Constructing"<<endl; } staticvoidf1(Mm); ~M() {cout<<"Destructing\n"; }};voidM::f1(Mm){cout<<"A="<<m.A<<endl;cout<<"B="<<B<<endl;}intM::B=0;intmain(){Mp(5),Q(10);M::f1(p);M::f1(Q);return0;}ConstructingConstructingA=5B=15DestructingA=10B=15DestructingDestructingDestructing【3.27】指出下列程序中的错误,并阐明为何。#include<iostream>usingnamespacestd;classStudent{public: voidprintStu();private: charname[10]; intage; floataver;};intmain(){Studentp1,p2,p3;p1.age=30;...return0;}age为private不能付值【3.28】指出下列程序中的错误,并阐明为何。#include<iostream>usingnamespacestd;classStudent{ intsno; intage; voidprintStu(); voidsetSno(intd);};voidprintStu();{cout<<"\nSnois"<<sno<<",";cout<<"ageis"<<age<<"."<<endl;}voidsetSno(ints){sno=s;}voidsetAge(inta){age=a;}intmain(){Studentlin;lin.setSno(1);lin.setAge(20);lin.printStu();}'classStudent'不存在一个叫'setAge'的方式【3.29】指出下列程序中的错误,并阐明为何。#include<iostream>usingnamespacestd;classPoint{public: intx,y;private: Piont() {x=1;y=2; }};intmain(){Pointcpoint;cpoint.x=2;return0;}构筑函数错误【3.30】下面是一个计算器类的定义,请完成该类组员函数的实现。classcounter{public: counter(intnumber); voidincrement();//给原值加1 voiddecrement();//给原值减1 intgetvalue();//取得计数器值 intprint();//显示计数private: intvalue;}; counter::counter(intnumber){value=number;}voidcounter::increment(intn){value+=n;}voidcounter::decrement(){value--;}intcounter::getvalue(){returnvalue;}voidcounter::print(){printf("%d\n",getvalue());}intmain(){inta,b;scanf("%d%d",&a,&b);counterct(a);ct.increment(b);ct.decrement();ct.print();return0;}【3.31】依照注释语句的提示,实现类Date的组员函数。#include<iostream>usingnamespacestd;classDate{public: voidprintDate();//显示日期 voidsetDay(intd);//设置日的值 voidsetMonth(intm);//设置月的值 voidsetYear(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<<"."<<month<<"."<<day<<endl;};intmain(){DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear();testDay.printDate();return0;}【3.32】建立类cylinder,cylinder的结构函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包括一个组员函数vol,用来显示每个cylinder对象的体积。#include<iostream>usingnamespacestd;#definePI3.14159classCylinder{public:Cylinder(doubleradius,doubleheight):radius(radius),height(height),volume(PI*radius*radius*height){total_vol+=volume;}doublevol()const;friendvoidgetParas(double&radius,double&height,double&vol,double&total_vol,constCylinder&obj);private:doubleradius;//radiusdoubleheight;//heightdoublevolume;//volumeofcurrentobjectstaticdoubletotal_vol;//totalvolume};doubleCylinder::total_vol=0;doubleCylinder::vol()const{returnthis->volume;}voidgetParas(double&radius,double&height,double&vol,double&total_vol,constCylinder&obj){//getprivatememberofCylinderradius=obj.radius;height=obj.height;vol=obj.volume;total_vol=obj.total_vol;}intmain(){doublerd=0,hg=0,vol=0,total_vol=0;Cylindercld_1(2,3.5),cld_2(5.2,7),cld_3(3.9,4.0);//3objectsgetParas(rd,hg,vol,total_vol,cld_3);cout<<"Cylinder3:"<<endl;cout<<"radius:"<<rd<<endl;cout<<"height:"<<hg<<endl;cout<<"volume:"<<vol<<endl;cout<<"TotalVolume:"<<total_vol<<endl;system("pause");return0;}【3.33】构建一个类book,其中含有两个私有数据组员qu和price,将qu初始化为1~5,将price初始化为qu的10倍,建立一个有5个元素的数组对象。显示每个对象数组元素的qu*price值。#include<iostream.h>classbook{intqu,price;public: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<<"数组对象"<<i+1<<"的qu*price值为:"<<obj[i].get_qu()*obj[i].get_price()<<endl;}}【3.34】修改习题3.33,通过对象指针访问对象数组,使程序以相反的次序显示每个对象数组元素的qu*price值。#include<iostream.h>classbook{intqu,price;public:book(intq){qu=q;price=10*q;}intget_qu(){returnqu;}intget_price(){returnprice;}};voidmain(){bookobj[5]={1,2,3,4,5};book*p;p=&obj[4];for(inti=0;i<5;i++){cout<<"数组对象"<<i+1<<"的qu*price值为:"<<p->get_qu()*p->get_price()<<endl;p--;}}【3.35】构建一个类Stock,含字符数组stockcode[]及整型数据组员quan、双精度型数据组员price。结构函数含3个参数:字符数组na[]及q、p。当定义Stock的类对象时,将对象的第1个字符串参数赋给数据组员stockcode,第2和第3个参数分别赋给quan、price。未设置第2和第3个参数时,quan的值为1000,price的值为8.98。组员函数print没有形参,需使用this指针,显示对象数据组员的内容。假设类Stock第1个对象的三个参数分别为:“600001”,3000和5.67,第2个对象的第1个数据组员的值是“600001”,第2和第3个数据组员的值取默认值。要求编写程序分别显示这两个对象数据组员的值。#include<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::endl;}private:char*stockcode;//或改为charstockcode[MAX_LEN];//其中MAX_LEN定义在前为一常量:constunsignedMAX_LEN=256;intquan;doubleprice;};//mainfunctionintmain(intargc,char*argv[]){charszTestString[]="600001";//It'sterminatedwith'\0'intiTestInteger=3000;doubledTestDouble=5.67;StockstObj1(szTestString,iTestInteger,dTestDouble);StockstObj2(szTestString);stObj1.print();stObj2.print();return0;}//endmai【3.36】编写一个程序,已经有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据组员表示)。#include<stdio.h>#include<string.h>#defineN4classstudent{intno;charname[10];intdeg1;//语文成绩intdeg2;//数学成绩intdeg3;//英语成绩staticintsum1;//语文总分staticintsum2;//数学总分staticintsum3;//英语总分public:student(intn,charna[],intd1,intd2,intd3){no=n;strcpy(name,na);deg1=d1;deg2=d2;deg3=d3;sum1+=deg1;sum2+=deg2;sum3+=deg3;}doubleavg1(){return(sum1*1.0)/N;}doubleavg2(){return(sum2*1.0)/N;}doubleavg3(){return(sum3*1.0)/N;}voiddisp(){printf("%4d%10s%6d%6d%6d\n",no,name,deg1,deg2,deg3);}};intstudent::sum1=0;intstudent::sum2=0;intstudent::sum3=0;voidmain(){double(student::*fp)();//定义组员函数指针students1(1,"Li",67,89,90);students2(2,"Ma",67,89,90);students3(3,"Zheng",67,89,90);students4(4,"Chen",67,89,90);printf("输出成果\n");s1.disp();s2.disp();s3.disp();s4.disp();fp=student::avg1;printf("语文平均分%g\n",(s1.*fp)());fp=student::avg2;printf("数学平均分%g\n",(s1.*fp)());fp=student::avg3;printf("英语平均分%g\n",(s1.*fp)());}

第四章:【4.8】使用派中类的重要原因是(A)。A.提升代码的可重用性B.提升程序的运行效率C.加强类的封装性D.实现数据的隐藏【4.9】假设已经定义好了一个类student,目前要定义类derived,它是从student私有派生的,定义类derived的正确写法是(c)。A.clasederived::studentprivate{…};B.clasederived::studentpublic{…};C.clasederived::privatestudent{…};D.clasederived::publicstudent{…};【4.10】在多继承结构函数定义中,几个基类结构函数用(c)分隔。A.:B.;C.,D.::【4.11】设置虚基类的目标是(b)。A.简化程序B.消除二义性C.提升运行效率D.减少目标代码【4.12】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classB1{public: B1(inti) {b1=i; cout<<"ConstructorB1."<<endl; } voidPrint() {cout<<b1<<endl; }private: intb1;};classB2{public: B2(inti) {b2=i; cout<<"ConstructorB2."<<endl; } voidPrint() {cout<<b2<<endl; }private: intb2;};classA:publicB2,publicB1{public: A(inti,intj,intl); voidPrint();private: inta;};A::A(inti,intj,intl):B1(i),B2(j){a=l;cout<<"ConstructorA."<<endl;}voidA::Print(){B1::Print();B2::Print();cout<<a<<endl;}intmain(){Aaa(3,2,1);aa.Print();return0;}321【4.13】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classMain{protected: char*mainfood;public: Main(char*name) {mainfood=name; }};classSub{protected: char*subfood;public: Sub(char*name) {subfood=name; }};classMenu:publicMain,publicSub{public: Menu(char*m,char*s):Main(m),Sub(s) {} voidshow();};voidMenu::show(){cout<<"主食="<<mainfood<<endl;cout<<"副食="<<subfood<<endl;}intmain(){Menum("bread","steak");m.show();return0;}主食=bread副食=stea【4.14】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classA{private: inta;public: A() {a=0;} A(inti) {a=i;} voidPrint() {cout<<a<<","; }};classB:publicA{private: intb1,b2;public: B() {b1=0;b2=0; } B(inti) {b1=i;b2=0; } B(inti,intj,intk):A(i),b1(j),b2(k) {} voidPrint() {A::Print(); cout<<b1<<","<<b2<<endl; }};intmain(){Bob1,ob2(1),ob3(3,6,9);ob1.Print();ob2.Print();ob3.Print();return0;}0,0,00,1,03,6,9【4.15】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classB1{ intb1;public: B1(inti) {b1=i; cout<<"constructorB1."<<i<<endl; } voidprint() {cout<<b1<<endl; }};classB2{ intb2;public: B2(inti) {b2=i; cout<<"constructorB2."<<i<<endl; } voidprint() {cout<<b2<<endl; }};classB3{ intb3;public: B3(inti) {b3=i; cout<<"constructorB3."<<i<<endl; } intgetb3() {returnb3; }};classA:publicB2,publicB1{ inta;B3bb;public: A(inti,intj,intk,intl):B1(i),B2(j),bb(k) {a=l; cout<<"constructorA."<<l<<endl; } voidprint() {B1::print(); B2::print(); cout<<a<<","<<bb.getb3()<<endl; }};intmain(){Aaa(1,2,3,4);aa.print();return0;}ConstructorB2.ConstructorB1.1ConstructorB3.3ConstructorA.4124,3【4.16】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classA{public: A(inti,intj) {x=i; y=j; } intsum() {returnx+y; }private: intx,y;};classB:publicA{public: B(inti,intj,intk,intl); intsum() {returnw+h; }private: intw,h;};B::B(inti,intj,intk,intl):A(i,j){w=k;h=l;}voidf(A&s){cout<<s.sum()<<endl;}intmain(){Bob(1,3,5,7);f(ob);return0;}4【4.17】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classA{ inta,b;public: A(inti,intj) {a=i;b=j; } voidMove(intx,inty) {a+=x;b+=y; } voidShow() {cout<<"("<<a<<","<<b<<")"<<endl; }};classB:privateA{ intx,y;public: B(inti,intj,intk,intl):A(i,j) {x=k;y=l; } voidShow() {cout<<x<<","<<y<<endl; } voidfun() {Move(3,5); } voidf1() {A::Show(); }};intmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();return0;}(1,2)5,6(6,9)【4.18】写出下面程序的运行成果。#include<iostream>usingnamespacestd;classbase1{public: base1() {cout<<"classbase1"<<endl; }};classbase2{public: base2() {cout<<"classbase2"<<endl; }};classlevel1:publicbase2,virtualpublicbase1{public: level1() {cout<<"classlevel1"<<endl; }};classlevel2:publicbase2,virtualpublicbase1{public: level2() {cout<<"classlevel2"<<endl; }};classtoplevel:publiclevel1,virtualpubliclevel2{public: toplevel() {cout<<"classtoplevel"<<endl; }};intmain(){toplevelobj;return0;}classbase1classbase2classlevel2classbase2classlevel1classtoplevel【4.21】已经有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据组员Childname用于表示小孩的名字,同时设计主程序显示一个小孩的出生时间和名字。classTime{public: Time(inth,intm,ints) {hours=h;minutes=m;seconds=s;}voiddisplay(){cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;}protected: inthours,minutes,seconds;};classDate{public: Date(intm,intd,inty) {month=m; day=d; year=y; } voiddisplay() {cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl; }protected: intmonth,day,year;};classBirthtime:publicTime,publicDate{public:Birthtime(char*Cn,intyy,intmm,intdd,inthh,intmint,intss):Time(hh,mint,ss),Date(mm,dd,yy){strcpy(Childname,Cn);}voiddisplay(){cout<<"姓名:"<<Childname<<endl;Date::display();Time::display();}protected:charChildname[20];}intmain(){Birthtimeyx("晓凤",,12,13,14,20,30);yx.display();return0;}【4.22】编写一个学生和教师数据输人和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。#include<iostream>#include<string>usingnamespacestd;classperson{private:intno;stringname;public:voidinput(){cout<<“请输入编号和姓名”;cin>>no>>name;}voiddisplay(){cout<<“编号”<<no<<endl;cout<<“姓名”<<name<<endl;}};classstudent:publicperson{private:intbh,score;public:voidget(){input();cout<<“请输入班号和成绩”;cin>>bh>>score;}voidshow(){display();cout<<“班号”<<bh<<endl;cout<<“成绩”<<score<<endl;}};classteacher:publicperson{private:stringzc,bm;public:voidget(){input();cout<<“请输入职称和部门”;cin>>zc>>bm;}voidshow(){display();cout<<“职称”<<zc<<endl;cout<<“部门”<<bm<<endl;}};intmain(){students;teachert;s.get();s.show();t.get();t.show();return0;}

第五章:【5.7】有关运算符重载正确的描述是(D)。A.C++语言允许在重载运算符时变化运算符的操作个数B.C++语言允许在重载运算符时变化运算符的优先级C.C++语言允许在重载运算符时变化运算符的结合性D.C++语言允许在重载运算符时变化运算符本来的功效【5.8】能用友元函数重载的运算符是(A)。A.+B.=C.[]D.->【5.9】有关虚函数,正确的描述是(A)。A.结构函数不能是虚函数B.析构函数不能是虚函数C.虚函数能够是友元函数D.虚函数能够是静态组员函数【5.10】派生类中虚函数原型的(D)。A.函数类型能够与基类中虚函数的原型不一样B.参数个数能够与基类中虚函数的原型不一样C.参数类型能够与基类中虚函数的原型不一样D.以上都不对【5.11】假如在基类中将show申明为不带返回值的纯虚函数,正确的写法是(C)。A.virtualshow()=0;B.virtualvoidshow();C.virtualvoidshow()=0;D.voidshow()=0virtual;【5.12】下列有关纯虚函数与抽象类的描述中,错误的是(C)。A.纯虚函数是一个特殊的函数,它允许没有详细的实现B.抽象类是指具备纯虚函数的类C.一个基类的阐明中有纯虚函数,该基类的派生类一定不再是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出【5.13】下面的程序段中虚函数被重新定义的措施正确吗?为何?classbase{public: virtualintf(inta)=0; . . .};classderived:publicbase{public: intf(inta,intb) {returna*b; } ...};正确【5.14】写出下列程序的运行成果。#include<iostream>usingnamespacestd;classA{public: A(inti):x(i) {} A() {x=0; } friendAoperator++(Aa); friendAoperator--(A&a); voidprint();private: intx;};Aoperator++(Aa){++a.x;returna;}Aoperator--(A&a){--a.x;returna;}voidA::print(){cout<<x<<endl;}intmain(){Aa(7);++a;a.print();--a;a.print();return0;}76【5.15】写出下列程序的运行成果。#include<iostream>usingnamespacestd;classWords{public: Words(char*s) {str=newchar[strlen(s)+1]; strcpy(str,s); len=strlen(s); } voiddisp(); charoperator[](intn);//定义下标运算符"[]"重载函数private: intlen; char*str;};charWords::operator[](intn){if(n<0||n>len-1)//数组的边界检查{cout<<"数组下标超界!\n";return'';}elsereturn*(str+n);}voidWords::disp(){cout<<str<<endl;}intmain(){Wordsword("ThisisC++book.");word.disp();cout<<"第1个字符:";cout<<word[0]<<endl;//word[10]被解释为word.operator[](10)cout<<"第16个字符:";cout<<word[15]<<endl;cout<<"第26个字符:";cout<<word[25]<<endl;return0;}ThisisC++book.第1个字符T第16个字符:第26个字符数据下标超界【5.16】写出下列程序的运行成果。#include<iostream>usingnamespacestd;classLength{ intmeter;public: Length(intm) {meter=m; } operatordouble() {return(1.0*meter/1000); }};intmain(){Lengtha(1500);doublem=float(a);cout<<"m="<<m<<"千米"<<endl;return0;}M=1.5千米【5.17】编一个程序,用组员函数重载运算符“+”和“-”将两个二维数组相加和相减,要求第一个二维数组的值由结构函数设置,另一个二维数组的值由键盘输入。#include<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);//组员函数重载运算符“+”Tow_arroperator-(Tow_arr);//组员函数重载运算符“-”};//结构函数完整Tow_arr::Tow_arr(inta1,inta2,inta3,inta4,inta5,inta6){a[0][0]=a1;a[0][1]=a2;a[0][2]=a3;a[1][0]=a4;a[1][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];}voidTow_arr::Show()//显示二维数组数据的函数完整{cout<<"二维数组内的数据是"<<endl;for(inti=0;i<2;i++){for(intj=0;j<3;j++)cout<<a[i][j]<<"”;cout<<'\n';}}}//组员函数重载运算符“+”完整Tow_arrTow_arr::operator+(Tow_arradd2){Tow_arrtemp;for(inti=0;i<2;i++

温馨提示

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

评论

0/150

提交评论