2021年面向对象程序设计形成性考核册作业四_第1页
2021年面向对象程序设计形成性考核册作业四_第2页
2021年面向对象程序设计形成性考核册作业四_第3页
2021年面向对象程序设计形成性考核册作业四_第4页
2021年面向对象程序设计形成性考核册作业四_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计形成性考核册作业四一、填空题:1.设px是指向一种类对象指针变量,则执行“deletepx;”语句时,将自动调用该类(C)。A.无参构造函数B.带参构造函数C.析构函数D.拷贝构造函数2.假定AB为一种类,则执行“ABa[10];”语句时调用该类无参构造函多次数为(D)。A.0B.1C.9D.103.假定AB为一种类,则执行“ABa(2),b[3],*p[4];”语句时共调用该类构造函多次数为(B)。A.3B.4C.5D.94.假定AB为一种类,px为指向该类一种具有n个对象动态数组指针,则执行“delete[]px;”语句时共调用该类析构函多次数为(C)。A.0B.1C.nD.n+15.对类中引用成员初始化是通过构造函数中给出(C)实现。A.函数体B.参数表C.初始化表D.初始化表或函数体6.一种类静态数据成员所示属性(C)。A.是类或对象属性B.只是对象属性C.只是类属性D.类和友元属性7.被非静态成员函数访问类数据成员(A)。A.可以是非静态数据成员或静态数据成员B.不也许是类静态数据成员C.只能是类非静态数据成员D.只能是类静态数据成员8.引入友元重要目是为了(C)。A.增强数据安全性B.提高程序可靠性C.提高程序效率和灵活性D.保证类封装性9.在重载一种运算符时,其参数表中没有任何参数,这表白该运算符是(B)。A.作为友元函数重载1元运算符B.作为成员函数重载1元运算符C.作为友元函数重载2元运算符D.作为成员函数重载2元运算符10.如果表达式a+b中“+”是作为成员函数重载运算符,若采用运算符函数调用格式,则可表达为(A)。A.a.operator+(b)B.b.operator+(a)C.operator+(a,b)D.operator(a+b)11.如果表达式++a中“++”是作为成员函数重载运算符,若采用运算符函数调用格式,则可表达为(D)。A.a.operator++(1)B.operator++(a)C.operator++(a,1)D.a.operator++()12.一种程序中数组a和变量k定义为“inta[5][10],k;”,且程序中包具有语句“a(2,5)=++k*3;”,则此语句中必定属于重载操作符是(A)。A.()B.=C.++D.*13.下面是重载双目运算符+普通函数原形,其中最符合+本来含义是(A)。A.Valueoperator+(Value,Value);B.Valueoperator+(Value,int);C.Value&operator+(Value,Value);D.Value&operator+(Value&,Value&);14.关于插入运算符<<重载,下列说法不对的是(B)。A.运算符函数返回值类型是ostream&。B.重载运算符必要定义为类成员函数。C.运算符函数第一种参数类型是ostream&。D.运算符函数有两个参数。15.C++继承性容许派生类继承基类(C)。A.某些特性,并容许增长新特性或重定义基类特性B.某些特性,但不容许增长新特性或重定义基类特性C.所有特性,并容许增长新特性或重定义基类特性D.所有特性,但不容许增长新特性或重定义基类特性16.对于公有继承,基类中私有成员在派生类中将(C)。A.可以直接使用成员名访问B.可以通过成员运算符访问C.依然是基类私有成员D.变为派生类私有成员17.建立包具有类对象成员派生类对象时,自动调用构造函数执行顺序依次为(C)构造函数。A.自己所属类、对象成员所属类、基类B.对象成员所属类、基类、自己所属类C.基类、对象成员所属类、自己所属类D.基类、自己所属类、对象成员所属类18.下列对派生类描述中错误说法是:(D)。A.派生类至少有一种基类B.派生类可作为另一种派生类基类C.派生类除了包括它直接定义成员外,还包括其基类成员D.派生类所继承基类成员访问权限保持不变二、填空题1.当一种队列为满时,不能对其做___插入_____元素操作。2.在一种用链表实现队列类中,假定每个结点包括值域用elem表达,包括指针域用next表达,链队队首指针用elemHead表达,队尾指针用elemTail表达,当链队非空时,__elemHead->next___________指向队首结点后继(即下一种)结点。3.在一种用链表实现队列类中,若链队为空或只具有一种结点,则队首指针值与队尾指针值___相似_____。4.一种类___析构_______函数通惯用于实现释放该类对象中指针成员所指向动态存储空间任务。5.定义类动态对象数组时,其元素只能靠自动调用该类___无参构造函数_________来进行初始化。6.假定AB为一种类,则执行“ABa[10];”语句时,系统自动调用该类构造函多次数为___10_____。7.对类中引用成员初始化只能通过在构造函数中给出___初始化表_______来实现。8.假定要把aa定义为AB类中一种引用整数型数据成员,则定义语句为_int&aa;__。9.假定顾客为类AB定义了一种构造函数“AB(intaa){a=aa;}”,则系统__不会_______为该类自动定义一种无参构造函数"AB(){}"。10.假定顾客为类AB定义了一种构造函数“AB(intaa=0):a(aa){}”,则定义该类对象时,可以有____2____种不同定义格式。11.假定顾客为类AB定义了一种构造函数“AB(intaa=0,intbb=0){a=aa;b=bb;}”,则定义该类对象时,可以有___3_____种不同定义格式。12.假定顾客只为类AB定义了一种构造函数“AB():a(0),b(0){}”,则定义该类对象x定义语句“ABx(5);”是___错误______(对的/错误)。13.静态成员函数只能____访问类静态数据成员,_不能___访问类非静态数据成员。14.重载运算符时,该运算符__优先级______、结合性以及操作符个数不容许变化。15.作为类成员函数重载一种运算符时,参数表中只有一种参数,阐明该运算符有____2____个操作数。16.重载抽取运算符>>时,其运算符函数返回值类型应当是___istream&_________。17.类型转换函数没有____返回值________类型,并且参数表为__空__________。18.当保护继承时,基类_公有和保护__成员在派生类中成为保护成员,派生类对象不能直接访问基类任何____成员。19.引进虚基类主线目是为了消除____二义性________。三、程序填空:1.已知一种运用数组实现栈类定义如下:constintARRAY_SIZE=10;classStack{public: voidInit(){top=-1;}//初始化栈为空voidPush(intnewElem);//向栈中压入一种元素 intPop();//从栈顶弹出一种元素 boolEmpty(){//判栈空if(top==-1)returntrue;elsereturnfalse;} intDepth(){returntop+1;}//返回栈深度 voidPrint();//按照后进先出原则依次输出栈中每个元素,直到栈空为止private: intelem[ARRAY_SIZE];//用于保存堆栈元素数组 inttop;//指明栈顶元素位置指针};该类Pop和Print函数实现分别如下:___(1)___{ if(top==-1){ cout<<"栈空!"<<endl; exit(1);//中断运营 } return___(2)___;}voidStack::Print(){ while(!Empty()) cout<<___(3)___<<'';}(1)intStack::Pop()(2)elem[top--](3)Pop()2.#include<iostream.h>#include<stdlib.h>classA{int*a;intn;intMaxLen;public:A():a(0),n(0),MaxLen(0){}A(int*aa,intnn,intMM){n=nn;MaxLen=MM;if(n>MaxLen)exit(1);___(1)___;//由a指向长度为MaxLen动态数组for(inti=0;i<n;i++)a[i]=aa[i];}~A(){delete[]a;}intGetValue(inti)___(2)___//函数体返回a[i]值};voidmain(){intb[10]={1,2,3,4,5,6,7,8,9,10}; Ar(b,10,10);inti,s=0;for(i=0;i<10;i++)___(3)___;//把r对象a数据成员中每个//元素值依次累加到s中cout<<"s="<<s<<endl;}(1)a=newint[MaxLen](2){returna[i];}(3)s+=r.GetValue(i)3.在下面一段类定义中,Derived类公有继承了基类Base。需要填充函数由注释内容给出了功能。classBase{private:intmem1,mem2;//基类数据成员public: Base(intm1,intm2){ mem1=m1;mem2=m2; } voidoutput(){cout<<mem1<<''<<mem2<<'';}//...}; classDerived:publicBase{private:intmem3;//派生类自身数据成员public://构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3Derived(intm1,intm2,intm3);//输出mem1,mem2和mem3数据成员值voidoutput(){ ___(1)___;cout<<mem3<<endl; }//...};Derived::Derived(intm1,intm2,intm3):___(2)___{___(3)___;}(1)Base::output()(2)Base(m1,m2)(3)mem3=m3四、写出程序运营成果:1.#include<iostream.h>classFranction{//定义分数类 intnume;//定义分子 intdeno;//定义分母public://把*this化简为最简分数,详细定义在此外文献中实现 voidFranSimp();//返回两个分数*this和x之和,详细定义在此外文献中实现 FranctionFranAdd(constFranction&x);//置分数分子和分母分别0和1 voidInitFranction(){nume=0;deno=1;}//置分数分子和分母分别n和d voidInitFranction(intn,intd){nume=n;deno=d;} //输出一种分数 voidFranOutput(){cout<<nume<<'/'<<deno<<endl;}}; voidmain(){ Franctiona,b,c,d; a.InitFranction(6,15); b.InitFranction(3,10); c.InitFranction(); c=a.FranAdd(b); d=c.FranAdd(a); cout<<"a:";a.FranOutput(); cout<<"b:";b.FranOutput(); cout<<"c:";c.FranOutput(); cout<<"d:";d.FranOutput();}程序运营成果为:a:6/15b:3/10c:7/10d:11/102.#include<iostream.h>classA{inta,b;public:A(){a=b=0;}A(intaa,intbb){a=aa;b=bb;} intSum(){returna+b;} int*Mult(){ int*p=newint(a*b); returnp; }};voidmain(){int*k; Ax(2,3),*p;p=newA(4,5);cout<<x.Sum()<<''<<*(x.Mult())<<endl;cout<<p->Sum()<<''<<*(k=p->Mult())<<endl;deletek;}程序运营成果为:569203.(此题作业本上缺漏)#include<iostream.h>classDate{public: Date(inty=,intm=1,intd=1){Year=y;Month=m;Day=d;} voidPrintDate(){cout<<Year<<'/'<<Month<<'/'<<Day<<endl;}protected: intYear,Month,Day;};classTime{public: Time(inth=0,intm=0,ints=0){Hour=h;Minutes=m;Seconds=s;} voidPrintTime(){cout<<Hour<<':'<<Minutes<<':'<<Seconds<<endl;}protected: intHour,Minutes,Seconds;};classDate_Time:publicDate,publicTime{public: Date_Time(){}; Date_Time(inty,intmo,intd,inth=0,intmi=0,ints=0):Date(y,mo,d),Time(h,mi,s){}; voidPrintDate_Time(){PrintDate();PrintTime();}};voidmain(){ Date_Timea,b(,10,1,23,59,59),c(,12,31); a.PrintDate_Time(); b.PrintDate_Time(); c.PrintDate_Time();}程序运营成果为:/1/10:0:0/10/123:59:59/12/310:0:04.(此题作业本上缺漏)/****************test.h**************************/#include<iostream.h>classPoint{public: voidInitP(floatx0=0,floaty0=0){X=x0,Y=y0;} voidMove(floatxf,floatyf){X+=xf;Y+=yf;} floatGetX(){returnX;} floatGetY(){returnY;}private:floatX,Y;};classRectangle:publicPoint{public: voidInitR(floatx,floaty,floatw,floath){ InitP(x,y);W=w;H=h; } voidZoomR(floatk){W*=k,H*=k;} floatGetH(){returnH;} floatGetW(){returnW;}private: floatW,H;};//***********************************test.cpp*******************#include”test.h”voidmain(){ Rectanglerect; rect.InitR(10,20,30,40); cout<<rect.GetX()<<','<<rect.GetY()<<',' <<rect.GetW()<<','<<rect.GetH()<<endl; rect.Move(5,6); cout<<rect.GetX()<<','<<rect.GetY()<<',' <<rect.GetW()<<','<<rect.GetH()<<endl; rect.ZoomR(7); cout<<rect.GetX()<<','<<rect.GetY()<<',' <<rect.GetW()<<','<<rect.GetH()<<endl;}程序运营成果为:10,20,30,4015,26,30,4015,26,210,280五、指出程序或函数功能1.intCount(IntNode*f){ if(!f)return0; intc=0;while(f){ c++; f=f->next; } returnc;}假定IntNode类型定义为:structIntNode{ intdata;//结点值域 IntNode*next;//结点指针域};函数功能为:记录出以f为表头指针链表中结点个数。2.intf(constchar*s){inti=0;while(*s++)i++;returni;};函数功能为:求出并返回字符指针参数s所指向字符串长度。六、程序改错,请依照程序段或函数模块功能改写个别地方错误。1.下面是分数类fract定义及测试主程序,在类定义及其友元函数定义中有两处错误,改正错误后程序应显示41/28,请指出错误所在行行号并给出改正意见。classfract{intden;//分子intnum;//分母public:fract(intd=0,intn=1):den(d),num(n){}//1行friendfract&operator+=(fract,fract&);//2行voidshow(){cout<<den<<'/'<<num;}//3行};//4行friendfract&operator+=(fractf1,fractf2)//5行{//7行f1.den=f1.den*f2.num+f1.num*f2.den;//8行f1.num*=f2.num;//9行returnf1;//10行}voidmain(){fractfr(3,4);fr+=fract(5,7);fr.show();}错误行行号为__2____和____5____。分别改正为___friendfract&operator+=(fract&,fract);__________和___fract&operator+=(fract&f1,fractf2);___。七、编程:1.依照下面类中构造函数原型和注释写出它类外定义。classStrings{ char*s;//指向动态分派字符串数组空间 intn;//记录字符串长度public: Strings(char*str);//构造函数,运用str字符串长度初始化n, //运用str字符串初始化s所指字符串空间 Strings(Strings&str);//拷贝构造函数 Strings&Give(Strings&str);//实现str赋值给*this功能StringsUion(Strings&str);//实现*this和str中字符串合并 //功能,把合并成果存入暂时对象并返回 intLenth(){returnn;}//返回字符串长度 voidPrint(){cout<<s<<endl;}//输出字符串};类外定义如下:Strings::Strings(Strings&str)//拷贝构造函数 { n=str.n; s=newchar[n+1]; strcpy(s,str.s); } 2.下列程序段中,A_class成员函数Variance()可求出两数平方差,请改写该程序段,把Variance()函数从A_class类中分离出来,用友元函数来实现该函数功能。classA_class{private:intx,y,t;public:A_class(inti,intj):x(i),y(j){if(y>x){t=x;x=y;y=t;}}intVariance(){returnx*x-y*y;}//其他函数从略};voidmain(){A_classA_obj(3,5);cout<<"Result:"<<A_obj.Variance()<<endl;}改写后程序如下:classA_class{private:intx,y,t;public:A_class(inti,intj):x(i),y(j){if(y>x){t=x;

温馨提示

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

评论

0/150

提交评论