您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 上海大学-面向对象的程序设计-答案
雷电老师的上机实验答案(部分)。以下文字中,红色为应填入的答案,绿色为代码的注释,蓝色为老师没有讲过的知识补充,紫色为我不确定的题目☆第二章从C到C++1.以下说法正确的有A.面向对象程序设计的基本特征是封装、继承、多态B.名字空间的作用是提供逻辑分类和防止名字冲突2.代码填空#includeiostreamusingnamespacestd;//这是因为std涵盖了标准C++的定义和声明,可以把std想象成一个很大的名字空间名,cin、cout都是其内部定义的函数namespacemyLib//此处定义了名叫“myLib”的名字空间{intmaxV(int&a,int&b){returnab?a:b;}}//此空间里面的所有函数的全名为:myLib::maxVintmain(){intx,y;cinxy;//因为题目要求要输入两个函数,所以我们采取依次输入的方法coutmyLib::maxV(x,y);//输出maxV函数值,名字空间里面定义过的函数,全名为:“名字空间名::函数名”return0;}输入12输出2//maxV函数的意思是取两个参数中较大的一个△这里说一下typedef的两条用法,下面的题目要用到:用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char*pa,pb;//这多数不符合我们的意图,它只声明了一个指向字符变量的指针,//和一个字符变量;以下则可行:typedefchar*PCHAR;//一般用大写PCHARpa,pb;//可行,同时声明了两个指向字符变量的指针虽然:char*pa,*pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。用途二:用在旧的C代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为:struct结构名对象名,如:structtagPOINT1{intx;inty;};structtagPOINT1p1;而在C++中,则可以直接写:结构名对象名,即:tagPOINT1p1;估计某人觉得经常多写一个struct太麻烦了,于是就发明了:typedefstructtagPOINT{intx;inty;}POINT;POINTp1;//这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。3.有函数typedefchar*LPTSTR;//此处规定了LPTSTR的类型是一个字符型的指针,这里为typedef的用途一intGetSystemDirectory(LPTSTRlpBuffer,intuSize);//函数中的两个参数类型,第一个为字符型的指针,第二个为整型正确的调用代码是(多选)A.chardir[200];GetSystemDirectory(dir,200);//dir[200]表示一个数组,dir也可以理解为该数组第一个成员的地址(类似于指针)B.char*pdir=newchar[200];GetSystemDirectory(pdir,200);//前半句定义了一个字符型的指针pdir并且动态创建了一个长度为200的字符型数组,所以可以满足后半句中函数参数的要求C.char*dir;GetSystemDirectory(dir,200);//前半句定义了一个字符型的指针dir,但是为什么不选这项我也不清楚,我要问问老师D.stringdir;GetSystemDirectory(dir,200);//dir的类型是一个字符串型的,不满足函数参数的要求E.LPTSTRlpBuffer;GetSystemDirectory(dir,200);//dir不知道从何而来,前半句定义lpBuffer为一个LPTSTR(字符类型的指针,为什么?看这道题的第一个注释)类型,并没有提到dir4.有函数typedefstruct_SYSTEMTIME{WORDwYear;WORDwMonth;WORDwDayOfWeek;WORDwDay;WORDwHour;WORDwMinute;WORDwSecond;WORDwMilliseconds;}SYSTEMTIME,*LPSYSTEMTIME;//此处用到了typedef的用途一:SYSTEMTIME和*LPSYSTEMTIME两者等价,类型都为结构体_SYSTEMTIME,只是SYSTEMTIME定义的变量为结构体_SYSTEMTIMELE类型,而LPSYSTEMTIME定义的变量的指针为结构体_SYSTEMTIME类型voidGetSystemTime(LPSYSTEMTIMElpSystemTime);//此处要求lpSystemTime为结构体_SYSTEMTIME的指针正确的调用代码是(多选)A.LPSYSTEMTIMEtime;GetSystemTime(time);//用LPSYSTEMTIME定义变量的形式为LPSYSTEMTIME*time,所以题目中time不是一个指针类型B.SYSTEMTIME*ptime;GetSystemTime(ptime);C.SYSTEMTIMEtime;GetSystemTime(&time);D.SYSTEMTIME*ptime=newSYSTEMTIME;GetSystemTime(ptime);5.根据下面的调用charstr[200];boolok=getstr(str,200);//①我们观察getstr函数里面的两个参数:str是一个大小为200的数组的数组名,同时也是指向这个数组第一个元素的指针名(基地址);200为这个数组的元素个数,也同时是这个数组表示的存储空间里面基地址的偏移量②可以观察到ok的类型是bool型,所以函数getstr也应为bool型写出其函数原型(多选)A.voidgetstr(charstr,intsize);//不符合②B.boolgetstr(charstr[],intsize);C.boolgetstr(char*p,intlen);D.ok=getstr(str,200);//函数原型应包括函数得到类型6.下面哪条代码是错误的?A.strings;s=iloveC++;couts'\n';//p322.5.4读写stringB.strings1=ilovec++;chars2[30];s2=s1;couts2'\n';//p33的2.5.5,明确说明了赋值时,左边必须是一个string类型得到字符串,右边可以是一个string类型的字符串,也可以是一个C风格的字符串或仅仅是一个char字符C.strings;s=ilove;s+=C++;couts'\n';//p342.5.6字符串的连接D.strings=iloveyou,t;t=s+!;coutt'\n';//同上7.如下代码的输出是p.x=4p.y=-11//注意cout输出内容的格式,不要忘记“p.x=”,“p.y=”#includeiostreamusingnamespacestd;structpoint{intx,y;};voidmove(point&q){q.x--;q.y++;}intmain(){pointp;p.x=5;p.y=-12;move(p);coutp.x=p.x'\n';coutp.y=p.y'\n';return0;}8.如下代码的输出是*p.x=4*p.y=-11#includeiostreamusingnamespacestd;structpoint{int*x,*y;};voidmove(point&q){--*q.x;//此处是将q.x所指向的内容自减1++*q.y;//此处是将q.y所指向的内容自增1}intmain(){pointp;inta=5,b=-12;p.x=&a;//此处,令a的地址为p.xp.y=&b;//此处,令b的地址为p.ymove(p);cout*p.x=*p.x'\n';cout*p.y=*p.y'\n';return0;}9.写一段代码double*db_ptr=newdouble;分配一个类型为double的存储空间,并将它的地址赋给变量db_ptr//此题代码也可为:double*db_ptr;db_ptr=newdouble;10.下面代码输出为5,有一行错误修改为:int&ai(inti){intj=1;改为staticintj=1;//因为代码定义了一个引用返回类型,j和b直接关联在一起,没改之前,当returnj时,存储j的空间已经收回,所以要把j改为静态(全局)变量j+=i;returnj;}intmain(){int&b=ai(1);b++;b=ai(2);coutb;}11.下面代码填空//此题主要是考枚举的概念,p282.4.4#includeiostreamusingnamespacestd;enum{MinSize=0,MaxSize=1000};enumColor{red=0xff0000,green=0xff00,blue=0xff};voiddraw(Colorcolor){if(color==red)cout红endl;elseif(color==green)cout绿endl;elseif(color==blue)cout蓝endl;}intmain(intargc,char*argv[]){inta[MaxSize];for(inti=0;iMaxSize;i++){a[i]=i;}Colorcolor=red;draw(color);return0;}12.下面代码的输出er:越界!012//此题考察例外处理,p532.8constintMaxSize=3;intcurr=0;intA[MaxSize];voidappend(intx){if(currMaxSize)A[curr++]=x;elsethrower:越界!;}intmain(intargc,char*argv[]){inti;try{for(i=0;i5;i++)append(i);}catch(char*e){couteendl;}for(intj=0;ji;j++)coutA[j];coutendl;return0;}☆第三章类类(1)设计并实现类(P1273-7)1.填空classProfession{stringname;stringtitle;doubleavgIncom;public:Profession(){}//构造函数Profession(stringname){this-name=name;}//构造函数~Profession(){}//析构函数intCompareIncome(Profession&profes){if(this-avgIncomprofes.getavgIncom())return-1;elseif(this-avgIncom==profes.getavgIncom())return0;//根据main函数最后输出结果的形式得出,特别注意C++的等于用“==”表示elsereturn1;}staticintCompareIncome(Profession&profes1,Profession&profes2){if(profes1.getavgIncom()profes2.getavgIncom())return-1;elseif(profes1.getavgIncom()profes2.getavgIncom())return1;elsereturn0;
本文标题:上海大学-面向对象的程序设计-答案
链接地址:https://www.777doc.com/doc-4447973 .html