李爱华、程磊_面向对象程序的设计课后答案_第1页
李爱华、程磊_面向对象程序的设计课后答案_第2页
李爱华、程磊_面向对象程序的设计课后答案_第3页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章2- 4#i nclude <iostream> using n amespace std;Add(i nt a,i nt b);int main()int x,y,sum;cout<<"please in put x and y:"cin> >x>>y;sum = add(x,y);cout vvxvv"+"vvyvv"="v<sumvve ndl;Add(i nt a,i nt b) retur n a+b;2- 5(1)this is a C+ program.x=50

2、.6 y=10 z=A x=216.34 y=10 z=A x=216.34 y=2 z=A x=216.34 y=2 z=Ex y z500 1000 0500 1500 1500500 200 15002- 6#i nclude <iostream> using n amespace std; int mai n()int *p,*i nit;int coun tp=0;int countn=0; p = new in t20;init = p;for(int i=0;i<20;i+) cin> >*p;p+;p = p-20;for( i=0;i<20

3、;i+)if(*p>0) cou ntp+;if(*p<0) cou ntn+;cout<<*p<<""p+;cout«"正数有:"<<countp«endl; cout«"负数有:"<<countn«endl; p = init;delete p;return 0;2- 7不做要求#i nclude <iostream>#in clude <stri ng>using n amespace std;void c

4、heckagescore(stri ng n ame,i nt age) if (n ame = "exit") throw n ame;if(age<0|age>50)throw age;int main()stri ng n ame; int age;for(int i=0 ;i<5 ;i+ )cin .ig nore (); getl in e(c in,n ame );cin> >age ;try checkagescore( name,age);catch( stri ng)cout«"exception :nam

5、e is exit"<<endl; con ti nue;catch(i nt)cout<<"excepti on :age is not proper"<<e ndl; con ti nue;cout< <"n ame:"< <n ame<<" age :"<<age<<e ndl; return 0;第三章3- 1(1) A(2) C (3) B (4)C(5)C(6)B (7) B (8) C(9)C3- 7(1)main(

6、)函数中pl.age = 30;语句是错误的。age是类的私有成员(2)构造函数应当给常数据成员和引用成员初始化,将构造函数改为:A(i nt a1,i nt b1):a(a1),b(b1)或A(i nt a1 ):a(a1),b(a) 再将 ma in 中的 A a(1,2); 改为 A a(1);(1)在Test类中添加语句:void prin t();void Prin t()coutvvxvv"-"vvyvv"="v<x-yvve ndl;改为void Test:Pri nt() coutvvxvv"-"vvyvv&qu

7、ot;="v<x-yvve ndl; ma in函数中Ini t(38,15); 改为:A.I nit(38,15);Prin t();改为: A.Pri nt();3- 8(1)Con struct ing ACon struct ing BDestructi ng BDestructi ng Adouble a,double bpoint & pp.x3- 9class boxin t len 1,le n2,le n3;public:box(int l1,int I2,int I3)len1 = l1;len2 = 12; len3 = 13; long volu

8、mn()return len 1*len2*len3;3- 10class Testint m1,m2;public:void In it(i nt a,i nt b)m1 = a;m2 = b;void Prin g()cout<<m1<<" "<<m2<<e ndl;3-11略3-12第四章4- 6(1) D (2) D (3) D (4) D (5) B(6) D4- 7(1)static in t cou nt = 0;这样初始化静态成员值是不对的将其改为static int count;在类外,main函数前加int

9、 Sample:co unt = 0;(2) #i nclude <iostream> #in clude <cstdlib> using n amespace std;class Ctest private:int x; const int y1; public:const int y2;Ctest(int i1,int i2):y1(i1),y2(i2)y1 =10;/y1 为常量不能赋值 x = y1;int readme() con st;int Ctest:readme ()c onstint i;i = x;x+; /常函数不能改变成员值 return x;

10、int main()Ctest c(2,8);int i = c.y2;c.y2 = i;/y2为常量,不能改值i = c.y1;/y1私有,类外不能访问return 0;将出错语句全部注释4- 8(1)题中印刷错误,将class C构造函数改为:C()cout«"co nstructor C:"运行结果为:con structor Acon structor Bcon structor C403434- 9# in clude<iostream.h>#i nclude<stdio.h>class Dateint year;int mon

11、th;int day;public:Date(i nt y,i nt m,i nt d)year=y ;mon th=m;day=d;void disp()coutvvyearvv" "<< mon th<<" "<<day<<e ndl;frie nd int coun t_day(Date &d,i nt k);frie nd in t l(i nt year);friend int h(Date &d1,Date &d2);;int coun t_day(Date &d

12、,i nt k)static int day_tab212=31,28,31,30,31,30,31,31,30,31,30,31.31,29,31,30,31,30,31,31,30,31,30,31;/使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年int j,i,s;if(l(d.year)j=1;闰年,取1else j=0; 非闰年,取0if(k)/K 非 0 时s=d.day;for(i=1;i<d.mo nth;i+)/d.mo nth为输入的月份s+=day_tabji-1; _else/K为 0 时s=day_tabjd.m on th-d.day;for(i=

13、d.m on th+1; i<=12; i+)s+=day_tabji-1; _return s;/S 为相差的天数int l(i nt year)if(year%4=0&&year%100!=0|year%400=0) /是闰年return 1;else /不是闰年return 0;int h(Date & d1,Date & d2)int days,day1,day2,y;if(d1.year<d2.year)/第一个日期年份小于第二个日期年份days=co un t_day(d1,0);for(y=d1.year+1;y<d2.year;

14、y+)if(l(y)闰年days+=366L;else/非闰年days+=365L;days+=co un t_day(d2,1); _else if(d1.year=d2.year)day仁co un t_day(d1,1);day2=cou nt_day(d2,1);days=day2-day1;elsedays=-1;retur n days;void mai n() int year1,year2, mon th1,m on th2,day1,day2; cout«"输入日期 1"<<e ndl;cin> >year1>>

15、; mon th1>>day1;cout«"输入日期 2"<<endl;cin> >year2> >mon th2>>day2;Date d1( year1, month1, day1),d2( year2, month2, day2); int ds=h(d1,d2);cout«"输出结果:"<<endl;if(ds>=0)d1.disp(); prin tf("与");d2.disp(); prin tf("之间有 %cR

16、nn",ds);else/第一个日期小于第二个日期cout«"时间错误!"<<endl;4- 10#i nclude<iostream.h>#i nclude<stri ng.h>class Stude ntint nu mber;char n ame20;public:Student(int i=O,char *s="0")/ 构造学生对象 nu mber=i;strcpy( names);void Print()/ 输出结果cout<v"Number:"< <

17、;nu mbervve ndl;cout«"Name:"v <n ame<<e ndl;friend bool greatertha n(Stude nt & st1,Stude nt &st2);bool greatertha n(Stude nt & st1,Stude nt &st2)return st1.number>st2.number;/ 返回成员 number的比较结果int main()Stude ntst 5=Stude nt(65,"Li"),Stude nt(78,&

18、quot;Zha ng"),Stude nt(80,"wa ng"),Stude n t(92,"zhao"),Stude nt(50,"zhe n");int max = 0;int min = 0;for(i nt i=1;i<5;i+)if(!greatertha n(stmax,sti)max = i;if(!greatertha n(sti,stmi n)min = i;cout«"最大成绩:"<<endl;stmax.Pri nt ();cout«&quo

19、t;最小成绩:"<<endl;stmi n .Pri nt ();return 0;4- 11#i nclude <iostream>#in elude <stri ng> using n amespace std;class Bookchar *n ame; char*author; int sale;public:Book() n ame = '0'author = '0' sale = -1;Book(char* a ,char* b,i nt c)n ame = new charstrle n( a)+1;

20、strcpy( name,a);author = new charstrle n( b)+1; strcpy(author,b);sale = c;void prin t()cout«"autor "vvauthorvve ndl; cout< <"n ame "<<n ame<<e ndl; cout<<"price "<<sale<<e ndl; Book()if(! name ) delete n ame; if(!author)delete au

21、thor;int main()Book b1("c+","li ai hua",12);Book b2;return 0;第五章5- 8改错题答案不唯一(1) class DC int x; public:DC()x =100;(2) 编译无错,但逻辑错误,可改为:class BCprotected: int x;public:BC(i nt i=0)x = i;class DC:private BCpublic:DC(i nt i):BC(i) ;将DC构造函数改为:DC(i nt i):BC(i)y = 0;5- 9 (1) base class(1

22、0,5) (3,9-18,33) (13,19) (13,19-18,33) (13,19)5-10#i nclude <iostream> using n amespace std;class Shape int x,y;public:Shape(i nt ix,i nt iy)x = ix; y = iy;virtual void show()cout«"pos: "vvxvv' '<<y<<e ndl; ; class Circle :public Shapeint radius;public:Circle

23、(int ix,int iy,int r):Shape(ix,iy),radius(r) void show() Shape:show ();cout<<"circle: "<<radius<<e ndl;class Rect :public Shapeint width,higth;iw,i ntpublic:Rect(i ntix,i ntiy,i ntih):Sh ape(ix,iy),width(iw),higth(ih)void show() Shape:show ();cout<<"width and h

24、igth: "<<width<<' '<<higth<<endl;int main()Shape s1(1,1);Rect r1(2,2,8,8);Circle c1(3,3,9);r1.show ();c1.show();return 0;5-11#i nclude<iostream.h>class vehicle /定义汽车类protected:int date; / 年份float price; / 价格public:vehicle(i nt date,float price);int get_date

25、();float get_price();float date_load();void show();宀class car:public vehicle /定义小车类int passe nge匚 .load; /载人数public:car(i nt date,float price,i nt passe ngers=4);int get_passe ngers();void show();class truck:public vehicle /定义卡车类float payload; / 载重量public:truck(i nt date,float price,float max_load=2

26、4000.00); float efficie ncy();void show();vehicle:vehicle(i nt date,float price)vehicle:date=date;vehicle:price=price;int vehicle:get_date() _return date;float vehicle:get_price() _return price;void vehicle:show()cout << " 年份:"<< date << "年"<< endl;cout &l

27、t;< "价格:"<< price << " 元"<< endl;car:car(i nt date, float price,int passe ngers) :vehicle (date, price)passe nger_load=passe ngers; _int car:get_passe ngers ()retur n passe nger_load; _void car:show()cout <<" 车型:小车"<< endl;vehicle:show()

28、;cout << " 载人:"<< passenger_load << " 人"<< endl;cout << en dl;truck: truck(int date, float price,float max_load):vehicle(date,price) _payload=max_load; _float truck:efficie ncy()retur n payload;void truck:show()cout <<"车型:卡车"<<

29、endl;vehicle: show ();cout << " 载重:"<< efficiency() << endl;cout << en dl;void mai n ()car car1(2001,2000,5);truck tru1(2002,8000,340000);cout << "输出结果"<< endl;car1. show ();tru1. show ();第六章6- 4d=3D:fu n();6- 5C:pri nt(),ci nfo=2C:pri nt(),ci

30、nfo=2D:pri nt(),di nfo=4B类不能定义对象,否则编译通不过,因为B未定义基类A中的虚函数prin t(), 它也是个虚基类。6-6#i nclude <iostream>using n amespace std;class Mammalpublic:virtual void Speak()cout<<"in Mammal"«e ndl;class Dog:public Mammalpublic:void Speak()cout<<"dog bark"«e ndl;int mai

31、n()Dog dog;Mammal *pM;pM = &dog;pM->Speak ();return 0;运行结果:dog bark6-7#i nclude <iostream>using n amespace std;class BaseClasspublic:virtual BaseClass() cout«"destruct Base"<<e ndl;;class Derived:public BaseClasspublic:Derived()cout<<"destruct derived&quo

32、t;<<e ndl;int main()BaseClass *pbase;pbase = new Derived; delete pbase;结果将不能正常执行子类析构6-8 #in clude <iostream> using n amespace std; class Shapepublic:virtual double Area() = 0;class Circle :public Shape double radius;public:Circle(double r):radius(r)double Area() return 3.14*radius*radius

33、; ;class Square :public Shapedouble radius;public:Square(double r):radius(r)double Area() return 6*radius*radius;;class Recta ngle :public Shapedouble width,radius;public:Recta ngle(double w,double r):radius(r)width=w;double Area() return width*radius;class Trapezoid :public Shapedouble height,radiu

34、s,le ngth;public:Trapezoid(double h,double r,double l):radius(r)height=h;length=l; double Area() return height*(radius+le ngth)/2;class Trian gle :public Shapedouble height,radius;public:Trian gle(double h,double r):radius(r)height=h;double Area() return height*radius/2;int main()double AreaSum= 0;S

35、hape * pS 6;pS1 = new Circle(1);pS2 = new Square(2);pS3 = new Rectangle(1,2);pS4 = new Trapezoid(4,2,5);pS5 = new Trian gle(4,2);AreaSum += pS1->Area();AreaSum += pS2->Area();AreaSum += pS3->Area();AreaSum += pS4->Area();AreaSum += pS5->Area();cout«"总面积是:"vvAreaSumvvend

36、l;coutvv"各三维图形面积如下:"<<endl;coutvv"圆形:"vvpS1->Area()vvendl;cout«"正方形:"vvpS2->Area()v<endl;coutvv"长方形:"vvpS3->Area()v<endl;coutvv"梯形:"vvpS4->Area()v<e ndl;coutvv"三角形:"vvpS5->Area()<<endl; return 0;6-9#

37、i nclude viostream>using n amespace std;class Stude ntpublic:virtual void show() = 0;class Junior :public Stude ntpublic:void show()coutvv"this would be info for junior stude nts"vve ndl;class Senior :public Stude ntpublic:void show()coutvv"this would be info for Senior stude nts&q

38、uot;vve ndl;int main()Stude nt *pstu; pstu = new Junior; pstu->show (); pstu = new Senior; pstu->show (); return 0;第七章7-1#i nclude <iostream> #in elude <stri ng> using n amespace std;class vectorint x,y;public:vector(i nt ix=0,i nt iy=0)x =ix;y = iy; vector operator+(vector& v1

39、)retur n vector(x+v1.x,y+v1.y);vector& operator+=(vector& v1)x +=v1.x;y +=v1.y; return *this;void show()coutvv'('vvxvv','vvyvv')'v<e ndl; ;int main()vector v1(1,2),v2(3,4),v3; v3 = v1+v2;v1+=v2;v3.show();v1.show();return 0;7-2 #i nclude <iostream.h>class Comp

40、lexprivate:double real,image;public:Complex(double x=0.0,double y=0.0) real =x; image =y; bool operator !=(c onst Complex & c);Complex operator -(c onst Complex &c);bool operator =(c onst Complex & c);Complex operator -();Complex &operator +=(c onst Complex &c);void Prin t();void

41、 Complex:Pri nt()coutvvrealvv" + "<<image<<"i"<<e ndl;Complex Complex :operator -(c onst Complex &c)Complex temp(real-c.real,image-c.image);return temp;bool Complex :operator =(c onst Complex &c)retur n (real=c.real && image=c.image);bool Complex

42、:operator !=(c onst Complex &c)return (real!=c.real | image!=c.image);Complex Complex :operator -()retur n Complex(-real,-image);Complex &Complex :operator +=(c onst Complex &c)real+=c.real;image+=c.image;return *this;int main()Complex c1(2,7),c2(4,2),c3;c3=c1-c2;c3.Pri nt(); if(c3=c1)co

43、ut«"c3 equals to c1"<<endl;else cout«"c3 does n? t equale to c1"«e ndl;c3=-c2;c3.Pri nt();c3+=c2;c3.Pri nt();if(c3 != c1) cout<v"c3!=c1"v<e ndl;return 0;7-3#i nclude <iostream>using n amespace std;bool rn (i nt y)bool flag = 0;if(y%400=0

44、 | y%4 =0&&y%100!=0) flag = 1;return flag;class Date private:int mon th, day, year;public:Date(i nt m, int d, int y);Date& operator+(i nt days); void showDate();Date:Date(i nt y, int m, int d) if (m>0 && m<13)mon th=m;if (d>0 && d<32)day=d;if (y>0 &&

45、; y<3000)year=y;Date& Date:operator+(i nt days)int i;for(i = days;i>0;)int diff ;switch(m on th)case 1:case 3:case 5:case 7:case 8:case 10:case 12: diff = 31 -day;break;case 4:case 6:case 9:case 11: diff = 30 -day;break; case 2:if (rn( year)diff = 29 - day;else diff = 28 -day; break;if(i&g

46、t;diff)i-= diff+1;day = 1;mon th+;if(mo nth>12)year+; mon th = 1;elseday+= i; break;return *this;void Date:showDate()cout<vyearvv"."vv mon th<<"."<<day<<e ndl;int main()Date obj(1996,1,1); obj.showDate (); obj = obj+59;obj.showDate(); return 0;7-4以+,二为例#in

47、 clude<iostream>#i nclude<stri ng.h> using n amespace std;class Stringchar *sbuf;int len gth;public:Stri ng()len gth=0;sbuf= new char; sbuf0='0'String(char *s)/用字符串初始化len gth=strle n( s);sbuf= new charle ngth+1;strcpy(sbuf,s);Stri ng (Stri ng& str)len gth=str.le ngth ;sbuf= n

48、ew charlength+1; strcpy(sbuf,str.sbuf );Stri ng()delete sbuf;Stri ng & operator =(Stri ng& str)if(sbuf = str.sbuf ) return *this;elsesbuf = new charstr.length +1; strcpy(sbuf,str.sbuf ); return *this; Stri ng operator +(Stri ng& str)/此函数需配合拷贝构造函数String st;st.le ngth = len gth + str.le ng

49、th ;st.sbuf = new charst.le ngth+1 ;st.sbuf 0 = '0'strcpy(st.sbuf,sbuf);strcat(st.sbuf,str.sbuf );return st;char & operator(i nt i)if(i<0|i>=le ngth) /对下标进行检查,超出围则报错退出程序cout«"下标越界错误!"<<endl;exit(0); retur n sbufi; void Show()coutvvsbufvve ndl;int main()Stri ng

50、s1("hello");Stri ng s2("world"),s3 s3 = s1+s2; / s3.Show ();return 0;7-6#in clude<iostream.h>/using n amespace std;class polynomialint n,i;float *a;public :polynomial(int x)n=x;a= new float n;polyno mial (const polynomial & p) /增加一个拷贝复制构造函数n=p.n;a= new float p.n;for ( i

51、nt i= 0; i<p.n; i+)ai=p.ai;polyno mial()po lyno mial()deletea;void seta( int y, float x)ay=x;void print()cout«"y=" <<an-1<<*八(” <<n-1<v")"for (i=n- 2;i>= 0;i-)cout«"+" <<ai<< "xA(" vvivv")"cout«e

52、ndl;polyno mial operator +(po lyno mial &x)if (n>=x.n)polyno mial t(n);copy(t,*this );for (i= 0;i<x.n;i+)i<x.nt.ai=t.ai+x.ai;return t;elsepol yno mial t(x. n);copy(t,x);for (i= 0;i<n;i+)t.ai=t.ai+ai;return t;polynomialoperator -(polynomial &x)if (n>=x.n)polyno mial t(n);copy(t

53、,*this );for (i= 0;i<=x.n;i+)t.ai=t.ai-x.ai;return t;elsepol yno mial t(x. n);copy(t,x);for (i= 0;i<=n;i+)t.ai=t.ai-ai;return t;friend void copy(polynomial &x,polynomial &y);void copy(polynomial &x,polynomial &y)int i;cout<< "无法复制"<<endl;x. pri nt();y.pri

54、nt(); system("pause");for (i= 0;i<=y.n- 1;i+)x.ai=y.ai;void main()polynomial j(3),k( 4),h( 4);j.seta(0, 1);j.seta(1,2);j.seta(2,3);k.seta(0,5);k.seta(1,6);k.seta(2,7);k.seta(3,7);j.pri nt();k.pri nt();polynomial m=k+j; /在这里再定义一个copy(h,k+j);h.pri nt();system("pause");第八章8-1(1)

55、templatevtype name T>T fun(T a)(2) templatevtypename T>T test(T a).(3) templatevtypename T>class Arraypublic: void fun();template<type name T> void Array<T>:fu n() Arrayvint> a1,a2,a3;8-4#in clude<iostream> using n amespace std;template <type name T>T max(T a,T b,

56、T c)T temp; temp=a>b?a:b; temp=temp>c?temp:c; return temp;int main()8山<<口&乂(11,29,22)<<6 ndl;8山<<口&灭ndl; 8山<<口&乂(0力')<<6 ndl;return 0;8-5 及 8-6#in clude< iostream>#in cludevstri ng> using n amespace std;template <type name T > void sort_bubble(T arr,i nt n) _for(i nt i=0; i<n-1;i+)for(i nt j=O;j< n-1-i;j+)if( arrj<arrj+1)T temp; temp=arrj; arrj=arrj+1; arrj+1=temp; class stude ntint num;stri ng n ame;public:stude nt(i nt n=O,stri ng n s="")num = n;n ame = ns;bool operator<(stu

温馨提示

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

评论

0/150

提交评论