2023年面向对象程序设计离线作业答案.docx
浙江大学远程教育学院面向对象程序设计课程作业答案第2章下面的注释(它在C+风格的单行注释中套入了类似于C的注释) 是否有效。/th i s is a st r an g e / * way t o do a c o mme n t*/答:有效2.3 以下这个简短的C+程序不也许编译通过,为什么?#includ e <iostre a m>us i n g n a mes p ace s t d;int main ()int a, b,c;c o u t<< n Enter two n um b ers:H;c i n > >a» b ;c=s u m (a,b);c o u t<<nsum is:H«c;re t urn 0;)sum (int a ,int b) r e tu r n a+b;答:不能潼sum使用前必须声明2.4 问题。(1)以下两个函数原型是否等价:flo a t fu n ( i nt a,f 1 oat b, c ha r *c); 悌三章:3. 7 在下面有关对构造函数的描述中,对的的是(B )。A.构造函数可以带有返回值B.构造函数的名字与类名完全相同C.构造函数必须带有参数D.构造函数必须定义,不能默认【3.8】在声明类时,下面的说法对的的是(C)oA.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是reg i s terC. priv a te> pu b lic> pr o te c t e d可以按任意顺序出现D .没有用p riva t e> pu b 1 i c> p rotected定义的数据成员是公有成 员3. 9在下面有关析构函数特性的描述中,对的的是(C )。A. 一个类中可以定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型D.析构函数可以有一个或多个参数3. 1 0构造函数是在(B )时被执行的。A.程序编译B.创建对象C.创建类D.程序装人内存3, 11 在下面有关静态成员函数的描述中,对的的是(B )。A.在静态成员函数中可以使用this指针B.在建立对象前,就可认为静态数据成员赋值C.静态成员函数在类外定义时,要用static前缀D.静态成员函数只能在类外定义)o3, 12在下面有关友元函数的描述中,对的的说法是(AA.友元函数是独立于当前类的外部函数B . 一个友元函数不能同时定义为两个类的友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加关键字friend3. 13友元的作用之一是(A)。A.提高程序的运营效率B.加强类的封装性C.实现数据的隐藏性D.增长成员函数的种类3, 14以下程序运营的结果是(B )。#i n cl u d e <i o st r eam>usin g n amespa c e std;c 1 ass Bp u b 1 ic:oB()«B(int i , i nt j ) x = i;产j ;ovoid p r intb()co u t«x<<n/,<<y«e n d 1;pri v a te:4n t x, y;c 1 ass Ap ubli c :A()° A( i n t I,in t j );v oid p rinta();private:o B c ;);A: :A (int i, int j): c (ij)()voidA:printa ()c.pr i ntb();)int main()A a(7 , 8);oa.pr i n t a ();return 0 ;d.d.A. 8,9B. 7,8C. 5,69, 103. 1 5以下程序的运营结果是(A)。#i n c 1 ude<iostream>us i ng n a m e s p ace s t d;c 1 a s s Apublic:v o id s e t ( i n t i,int j) x=i;° y=j;。in t get_y () r et u rn y ;p r iv a te:。i nt x, y ;);class boxpublic:v oid s et( i nt l,int w,int s,in t p) o leng t h=l;3w idt h = w;1 abe 1 .set(s, p);6)int get_a r ea()re t urn 1 e n g t h* wid t h;°p r ivate:oint 1 e ngth,wid t h;A label;:in t mai n ()box b;b.se t (4,6, 1 ,2 0 );co u t «b. ge t _a r e a () « e ndl;retur n 0;A. 2 4B. 4C. 2 0D. 6.16以下程序的运营结果是(B )。#i n clude<i o stream>u s ing namespa c e s t d;class S amp 1 e pub lie:Sam p le(int i, i nt j) x= i ;° y =j;)o voi d d isp() c out« "dis plH«en d 1 ;6 void d i s p () c o nst。(co ut«nd i sp2y vend 1 ;° p r i v a t e:i nt x ,y;int main ()c o nst S a mpl e a( 1 , 2);a. d i s p ();return 0 ;A. disp 1 B . d i sp2C. d i spl d isp2D.程序编译犯错3,17以下程序的运营结果是(B )0#include<i o stream>using names pace std;cl a s s R (pub lie:o R(int rl, i nt r2)。Rl=rl;。R2=r 2 ;)b voi d p ri n t ();void print() const;p r iva t e:int R1,R2;);v o id R : : p r int ()cout«Rl« n «R2«endl;)void R:p r i nt() c o n stco u t <<R1«H, n <<R2«e n d 1 ;in t main() R a(6,8);const R b (56,8 8 );b . p ri n t ();re t u rn 0;A. 6,8B. 56,88 C. 0,0D. 8,6【3.18写出下面程序的运营结果。# include<iostream >u sing nam e s p ac e s td;cl a ss toypub lie:toy (i n t q,int p)quan=q;p r ice=p;。o i n t get_ q ua n ()。return q u an;6 。int g et p ric e ()。 return price;pri v ate:int qu a n , p r i ce;);int main() toy op3 2=toy” 2 0), toy(30, 48),。 t oy ( 5 0 , 68),toy( 7 0,80), toy(90,1 6 ) , toy (11,120),);for (int i = 0; i < 3 ; i+)(c o u t«op i 0 . g e t_quan()«H,n;c o u t «opiJOJ. g e t_pr i c e ()«n nH;cou t <<op i 1. g e t_ q uan()« ” J;co u t<<o p il.g e t_pric e ()<<n n ncout«end 1 ;return 0;)1 0,2030,4 85 0, 6870, 8090, 161 1,1203.19写出下面程序的运营结果。# in c lu d e<iost r e a m>using name space s t d;c 1 a ss ex a mpl e p u blic:o exam p 1 e ( i n t n) i = n;。 cou t<<HC o n s t r u c ti n gnH;。)oe x amp 1 e () cout<<nDest r u cting n n;°int get_i()。 retur n i;)pr i v ate:“nt i;);int s q r_i t (e x a mple o)retu r n o.geti() * o g et_i();)int ma i n() example x( 1 0);cout« x . g e ti ()<<endl;co u t<< s qr_it (x) << e nd 1 ; retu r n 0;101 00Destr u c tingDestruc ting3.20 下面程序的运营结果。#include<iost r e a m>usin g n a mespace std;clas s aClass p ub 1 ic: o a C las s ()tot a 1+;6 a Cl a ss()o t otal-;“nt g e ttotal() r et u rn to t a 1 ;private:osta t ic i n t t ota 1 ;卜i nt aC 1 a ss: :to t al=0;i nt main () a Cl a s s ol,o2,o3;cout«o 1 .gettotal()«" o b j e cts in e xis t encenH;aClass * p ;p=ne w aClass;if(1p) co u t «H All o catio n er r o rnn;return 1;)cou t «o 1 . g e t t otal();cou t <<Hob j e c ts in existen c e a fte r allo cationnn; delete p ;c o u t <<ol.ge t t o t a 1 ();cou t<<nobj e cts i n e xistence a f ter de 1 etion n n;float fun(int, float, char * );等价(2)以下两个函数的第一行是否等价:flo a t f un(i n t a, float b,char * c);float fun(in t ,f 1 oat, char* );答:等价【2.6】下列语句中错误的是(D )oA.int*p=new int( 1 0 );B. int * p =new in t 10;C.i n t * p = n e w int;D.int *p= n ew in t 40 ( 0 );2. 7假设已有定义 “const char * cons t n ame= chen; ” 下面的语句中对的的是(D )oA. name 3B. name=n 1 in”;C. name=new cha r 5;D. c o u t«n a me3;2. 8 假设已有定义“ch ar * cons t n a me二 chen ;”下面的语句中对的的是(A )0A. n a me 3=' qB. nam e =" 1 in'1;C. name= n ewe h ar5;D. n ame = n e w c h a r('q');2. 9 假设已有定义“co nst char * n am e=chen ; ”下面的语句中错误的是(A )oA. n a me 3=' q'B. n a m e =n 1 i n”;C. name=ne w ch a r 5 ;D. n ame = n e w ch a r(“);【2.10】重载函数在调用时选择的依据中,(B )是错误的。A.函数名字C.参数个数B.函数的返回类型D.参数的类型return 0;3obje c t s in existenc e4 o bj e cts in existence afte rail ocation3object s in existence aft e r d elet i on3. 2 1 写出下面程序的运营结果。# i nclu d e<i o s tream>using namesp ace s t d ;cl a s s t est p u bl i c:。te s t();t e sp riva t e:“nt i;;test:te s t() i=25;for(int ct r =0;ctr<10;ctr+) c o u t « n Coun t i ng a t n < <ctr« H n ”)test anObject;int m a in() r e t ur n 0;C o unt i ng a tOCountin g a 11Counting at2Cou n t ing at3Co u n t i n g a t 4Co u nting a t 5Co u nt i ng a t 6C ounti n g a t 7Cou n tin g a t 8Counti n g at93.22 写出下面程序的运营结果。#i n clude< i ostr e a m>u s in g n am e sp a c e std;cl a ss Aint a,b;p u blic:oA ()。 a =0;o b = 0;cou t <<nDe f aul t cons t rue tor calle d A n H;A(int i,in t j)“a=i;co u t« n Constr u ctor: a=n<<a«n,b= n <<b<< end 1 ;int m a i n()A a3;Ab3=A(l, 2), A (3,4),A(5,6); re t u rn 0;De f ault c o ns t ru c t or cal 1 e d .De f a u It construe t or call e d .Default cons t rue tor c a 1 led.Co n struct o r: a =l,b=2Co n st r u ctor: a=3, b =4Construe t o r: a= 5 ,b=63.23写出下面程序的运营结果。#in c lude<iostr e am>using names p ac e s t d;c lass Te s tpr i vat e :。i nt va 1 ;p u blic:。Test() cout<<" d efault.H« e ndl;°T e s t(i n t n) val=n;c ou t <<nC o n. ”<Vendl;o Te s t(con s t Test& t)。val= t .va 1 ;o cout<<nCopy con. H« e ndl;6);in t ma i n ()Test tl(6);T es t t2= t 1;Test t3;t 3 =tl;ret urn 0;)Con.Copy con.Default.3.24 写出下面程序的运营结果。# i nc 1 u de<i o s t r e a m>using namespa c e s t d;class N (private:o i nt A;。static int B;pub 1 ic:N(i n t a)A=a;B+=a;stati c void fl (N m);void N:: fl(N m)c o ut«HA=n<<m. A«e n d 1;co u tV<" B V B « e n d 1 ;)intN:: B=0;int ma i n ()N P,Q(9);N:fl(P);N:f 1 (Q);r e turn 0;)A=5B=14A=9B=143. 25写出下面程序的运营结果。#inclu d e <io s tre a m>using namespace s t d ;class M“nt x,y;public:M() x = y = 0;M(int ijnt j) x = i ;y刁;vo i d cop y (M * m);v oid s e t x y (in t i,in t j) x=i;y二j;wo i d p r i n t ()c o ut«x<< n /«y« e n dl;void M:co p y(M*m)x=m->x;y = m >y;)v o id f un(M m 1 ,M * m 2 )ml.setx y (1 2 ,15);m2->s e tx y (22,2 5 );i nt m a in ()M p (5,7),q;q - c opy(&p);fun (p,&q);p .print();q. p r int();r e turn 0;5, 72 2, 2 53. 26写出下面程序的运营结果。#incl u de<iostr e am>u s ing n a m espace std;c las s Mint A;s ta t i c in t B;pu b lie:M (in t a)“A=a;° B+=a;cout<< "Con struc t in g n«e n d 1;static void f 1(M m);b M () c o ut<<nDestruct i ng nn;void M: f 1(M m)cout<<nA=H«m. A « e ndl;c out<<n B= n «B<< e ndl;int M:B=O;int ma i n()Mp(5) ,Q(1 0);M:fl(p);M:fl(Q);return 0;)Const r ucti n gCons t ruct i ngA=5B=1 5D e structingA=1 0B= 1 5De s tructi n gD es t ructingD e s t r uc t i ng. 2 7指出下列程序中的错误,并说明为什么。#in c 1 u de< i o s t r e am>using n ame s pa c e s td;cla s s S t udentpublic:。v oid p r in t St u ();p r i vate:。c har name 10;int ag e ;afloat a ver; int m a i n() Stud ent p 1, p2, p3;pl. a g e =30; ret u r n 0; age 为private不能付值3. 28指出下列程序中的错误,并说明为什么。#i n cl u d e <ios t re a m>using nam e s p ace st d ;class S tud e n t int sno;Ant ag e ;o v o id p r in t S tu();void se t Sno(in t d ););vo i d prin t St u (); c o u t<< n n S no isn<<sno«n, H; co u t<<nage i s n«age«n.n<<endl;)v o i d se t Sno (int s)s n o=s;vo i d setA g e(int a ) a g e=a;)i n t m a in()Stud ent lin;lin.s e t S no(2023 1 );lin. s e t A g e( 2 0);lin.printStu (); 'class S tuden t '不存在一个叫's etA g e7的方式【3.29】指出下列程序中的错误,并说明为什么。#in c lu d e< i o s t ream>u s ing n amespac e s td;clas s P o intp u blic:int x,y;pr i v ate:o P ion t ()x=l;y=2;);int main() P o int cpoint;c p oi n t.x=2;ret u r n 0;构筑函数错误2. 1 1在(A )情况下适宜采用内联函数。A.函数代码小,频繁调用B.函数代码多,频繁调用C.函数体具有递归语句D.函数体具有循环语句2. 12 下列描述中,(C)是错误的。A.内联函数重要解决程序的运营效率问题B.内联函数的定义必须出现在内联函数第一次被调用之前C.内联函数中可以涉及各种语句D.对内联函数不可以进行异常接口声明2, 13在C+中,关于下列设立默认参数值的描述中,(B )是对的的。A.不允许设立默认参数值B.在指定了默认值的参数右边,不能出现没有指定默认值的参数C.只能在函数的定义性声明中指定参数的默认值D.设立默认参数值时,必须所有都设立2. 14下面的类型声明中对的是(D )。A. i n t &a 4 ;B. i nt &* p ;C. int &&q;D. int i,*p=&i;2. 15下面有关重载函数的说法中对的的是(C )0A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同2. 16 关于ne w运算符的下列描述中,(D )是错误的。A,它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C,使用它创建对象时要调用构造函数3.30下面是一个计算器类的定义,请完毕该类成员函数的实现。class counter publ i c:coun ter (int n u mber);给原值加1/ /给原值减1/ /取得计数器值/ /显示计数给原值加1/ /给原值减1/ /取得计数器值/ /显示计数voi d inc r e ment();v o i d de c r em e n t ();Ant g e t v alu e ();o i n t p r in t ();p riv a te: “nt value;;cou n t er:co u n ter( i nt numbe r ) value = numb e r;)void c ount e r : i n c rem e n t( i nt n) value += n;)void c o unter: :decrement()v a lue ;i nt co u nter:ge t value ()ret u r n value;)void c oun t er:p r i n t() p rintf(n%d n ", g e tva 1 ue ();i n t ma i n ()i nta, b;scanf( M %d%d ”,&a,&b);counte r ct (a);c t.incremen t (b);c t. decrement();return 0;3.31根据注释语句的提醒,实现类Date的成员函数。# i nc 1 ud e <i o s tream >u sin g name space std;clas s Da t epublic:显示日期/设立日的值/设立月的值/设立年的值o voi d pr i n t D a t e();o void setDay(i n t d);e vo i d s e tMo n th(int m);e void setYea r (int y);pri v ate:int day,mon t h, year;i nt Date:: s e t y e ar(in t y)y e ar=y;r e turn year;int Da t e :setm o nth(i n t m)mont h =m;return mo n th;i nt D a t e : :s e td a y(i n t d )(day二d;re t u rn day;)V o idD a te:printdate () cout«y e a r«H.n<<month<<H,H<<day« e n d 1;);i nt main()Date testDay;t e s t D a y.se t Day ( 5 );testDay. set Month(l 0 );t e st Day. set Y ea r (20 2 3);testDa y .p r in t Dat e ();r e turn 0 ;3, 3 2 建立类cy 1 in d e r, c y Under的构造函数被传递了两个d o uble 值,分别表达圆柱体的半径和高度。用类cylinder计算圆柱体的体 积,并存储在一个d o u b le变量中。在类c ylinder中包含一个成员函数vol,用来显示每个c y linde r对象的体积。#i n clude<iostr e am> using nam e s p a c e std;#def i ne PI 3. 14159class Cyli n d erpubl i c :Cylinder (doub 1 e ra d ius, do u b 1 e h e i g h t ) :r a dius (ra d iu s ), hei g ht (h e i ght), vol u m e (PI * radius * r adius*heigh t ) total_v o 1 += volume;)do u b1 e vol ()const;fri end v oid getParas ( doub 1 e& r ad i us, d ouble& h eight, double&vol, d o ubl e & to t al_vo 1 , const Cylind e r& obj);p r i v a te:d o uble radius; / / r ad i us d o u ble hei g ht; /h e ight d o u b le volum e ;/ v o 1 ume of cu r ren t obj ec tst a tic double total_vol;/ total volume ;doubl e Cylind e r: : t o t al_ v ol = 0;dou ble C y linder: : vo 1 () c o n s tr e t u rn this>vo 1 ume; voi d get Paras (do u b 1 e & r ad i us, do u bl e & h e i ght, double& vol, d o uble& total_v o 1, c onst Cylin d er& obj) / g et pr iv a te membe r of C y 1 i n d e r radius = ob j . rad i u s ; he i gh t = o bj. h e ig h t; vol = o bj. vol u m e; total_ v ol = obj. total_v o1;int main ()(d o u b le rd = 0, hg = 0, v o 1= 0, t otal_ vol = 0 ;Cylinder cl d l(2, 3.5),c 1 d _2 ( 5 . 2, 7) , cld_3 (3. 9, 4. 0) ; /3 ob j e cts g etPa r a s ( r d , hg, vol, total_vol, cl d _ 3 );c o u t<< H C y 1 i n der 3: " <<e n d 1 ;c out<</zradi u s : n <<rd<<e n dl;c o u t<<z/ h eig h t :<<h g <<endl;cout<<z/ v olume: <Xvo 1 << e ndl;co u t< T o t a 1 Vol u me: n << t o t a 1 _ v ol<<endl;sys t em (pau s e);r e tu r n 0;3, 33构建一个类boo k,其中具有两个私有数据成员q u和pri c e,将qu 初始化为15 ,将price初始化为qu的1 0倍,建立一个有5个元 素的数组对象。显示每个对象数组元素的qu*price值。#inc 1 u d e <ios t ream. h>class bo o kint qu, price;pub 1 i c:bo o k(in t q )(qu = q; pr i ce=10*q;)i nt g etqu() r e t u rn qu; int get_price () retur n p r i c e; ;void mai n ()book obj 5 = 1,2, 3, 4, 5 ;for( i nt i=0; i< 5 ; i+) c ou t数组对象”的 q u*pr i c e 值 为:get_ q u ()*obji. get p r i ce () <<e n d 1 ;【3.34】修改习题3. 33,通过对象指针访问对象数组,使程序以相反的顺 序显示每个对象数组元素的q u * p r i ce值。ttinclude < i ostr e am. h >c 1 a ss b o ok(i nt qu, price;publi c :book ( i nt q )qu= q ; p r ice= 1 0*q;i n t get_ q u () retu r n qu; )int ge t price () r etu r n p r i c e ; ;vo i d m a in ()b o ok o b j 5=1,2, 3, 4, 5;boo k * p ;p=&ob j 4;for (int i=0; i<5; i+) c o u 数组对象i + IV的 qu * p rice 值 为:n <<p >ge t _qu () *p->get_pr i c e () <<e n dl;P 一;3, 35构建一个类St o ck,含字符数组s t o ckco d e及整型数据成员qu an、双精度型数据成员price。构造函数含3个参数:字符数组na 口 及q、P。当定义Stoc k的类对象时,将对象的第1个字符串参数赋 给数据成员st o c k c o de,第2和第3个参数分别赋给q u a n、p ri ceo未设立第2和第3个参数时,qu a n的值为1 0 00, p r ice 的值为8. 9 8 o成员函数print没有形参,需使用t h i s指针,显 示对象数据成员的内容。假设类Stock第1个对象的三个参数分别为:“6 0 00 0 1 ”,3 0 00和5. 6 7,第2个对象的第1个数据成员的值 是“6 0 0 001”,第2和第3个数据成员的值取默认值。规定编写程序 分别显示这两个对象数据成员的值。ftinclude <i o st r eam>/ c onst u n si g n ed M A X_L EN = 2 5 6;class S to c k p ublic:/这里用的初始化形参列表Stock ( c har na, i n t q=1000, double p = 8.98) : s to c k code(na), quan (q), price (p)()void p r i n t ( v o i d)s t d: : c out << t h i s->sto c k c ode < << q uan << " <<pr i c e << s t d : :en d 1;)pr i vate:c h ar * sto c k cod e ;/ / 或改为 char sto c kcodeMAX_LEN;/ 其中 MAX_LEN 定义在前为一常量:c on s t u n s i gned MAX_LEN = 256;int quan; double p rice; ;/ main fu n c t i on in t ma i n (int a rg c , char *argv口)char szTestS t ring = 60 0 0 0 1; /It's t e rmin a ted w i thin t i Test I ntege r = 3000;5.67;dou b 1 e dTe s tDouble =Stock stObjl (sz T es t S tr