C++课后习题答案.docx
- 文档编号:6400787
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:17.67KB
C++课后习题答案.docx
《C++课后习题答案.docx》由会员分享,可在线阅读,更多相关《C++课后习题答案.docx(18页珍藏版)》请在冰豆网上搜索。
C++课后习题答案
章多态性与虚函数
1.在例12.1程序基础上作一些修改。
定义Point........
//Point.h
#ifndefPOINT_H
#definePOINT_H
usingnamespacestd;
classPoint;
ostream&operator<<(ostream&,constPoint&);
classPoint
{public:
Point(float=0,float=0);
voidsetPoint(float,float);
floatgetX()const{returnx;}
floatgetY()const{returny;}
friendostream&operator<<(ostream&,constPoint&);
protected:
floatx,y;
};
#endif
//Circle.h
#include"Point.h"
#ifndefCIRCLE_H
#defineCIRCLE_H
usingnamespacestd;
classCircle;
ostream&operator<<(ostream&,Circle&);
classCircle:
publicPoint
{public:
Circle(floatx=0,floaty=0,floatr=0);
voidsetRadius(float);
floatgetRadius()const;
floatarea()const;
friendostream&operator<<(ostream&,Circle&);
protected:
floatradius;
};
#endif
//Cylinder.h
#include"Circle.h"
#ifndefCYLINDER_H
#defineCYLINDER_H
usingnamespacestd;
classCylinder;
ostream&operator<<(ostream&,constCylinder&);
classCylinder:
publicCircle
{public:
Cylinder(floatx=0,floaty=0,floatr=0,floath=0);
voidsetHeight(float);
floatgetHeight()const;
floatarea()const;
floatvolume()const;
friendostream&operator<<(ostream&,constCylinder&);
protected:
floatheight;
};
#endif
//Point.cpp
#include
#include"Point.h"
Point:
:
Point(floata,floatb)
{x=a;y=b;}
voidPoint:
:
setPoint(floata,floatb)
{x=a;y=b;}
ostream&operator<<(ostream&output,constPoint&p)
{output<<"["<
returnoutput;
}
//Circle.cpp
#include
#include"Circle.h"
Circle:
:
Circle(floata,floatb,floatr):
Point(a,b),radius(r){}
voidCircle:
:
setRadius(floatr)
{radius=r;}
floatCircle:
:
getRadius()const
{returnradius;}
floatCircle:
:
area()const
{returnfloat(3.14159*radius*radius);}
ostream&operator<<(ostream&output,Circle&c)
{output<<"Center=["< returnoutput; } //Cylinder.cpp #include #include"Cylinder.h" Cylinder: : Cylinder(floata,floatb,floatr,floath): Circle(a,b,r),height(h){} voidCylinder: : setHeight(floath){height=h;} floatCylinder: : getHeight()const{returnheight;} floatCylinder: : area()const {returnfloat(2*Circle: : area()+2*3.14159*radius*height);} floatCylinder: : volume()const {returnCircle: : area()*height;} ostream&operator<<(ostream&output,constCylinder&cy) {output<<"Center=["< <<"\narea="< returnoutput; } //main.cpp #include #include"Point.h" #include"Circle.h" #include"Cylinder.h" voidmain() {Cylindercy1(5,4,2,10); cout<<"\noriginalcylinder: \nx="< < <<",volume="< cy1.setHeight(6); cy1.setRadius(4); cy1.setPoint(5,5); cout<<"\nnewcylinder: \n"< Point&pRef=cy1; cout<<"\npRefasapoint: "< Circle&cRef=cy1; cout<<"\ncRefasaCircle: "< } 3.在例12.3的基础上作以下修改,并作出必要的市讨论 <1>把构造函数修改为带参数的函数,在建立对象时初始化。 #include usingnamespacestd; classPoint {public: Point(doublea,doubleb): x(a),y(b){} ~Point(){cout<<"executingPointdestructor"< private: doublex; doubley; }; classCircle: publicPoint {public: Circle(doublea,doubleb,doubler): Point(a,b),radius(r){} ~Circle(){cout<<"executingCircledestructor"< private: doubleradius; }; intmain() {Point*p=newCircle(2,1,4); deletep; return0; } <2>先不将析构函数声明为virtual,在main函数中另设一个指向Circle类对象的指针变量....... #include usingnamespacestd; classPoint {public: Point(doublea,doubleb): x(a),y(b){} ~Point(){cout<<"executingPointdestructor"< private: doublex; doubley; }; classCircle: publicPoint {public: Circle(doublea,doubleb,doubler): Point(a,b),radius(r){} ~Circle(){cout<<"executingCircledestructor"< private: doubleradius; }; intmain() {Point*p=newCircle(2,1,4); Circle*pt=newCircle(2.5,1.8,4.5); deletept; return0; } <3>不作第 (2)点的修改而将析构函数声明为virtual,运行程序,分析结果 #include usingnamespacestd; classPoint {public: Point(doublea,doubleb): x(a),y(b){} virtual~Point(){cout<<"executingPointdestructor"< private: doublex; doubley; }; classCircle: publicPoint {public: Circle(doublea,doubleb,doubler): Point(a,b),radius(r){} ~Circle(){cout<<"executingCircledestructor"< private: doubleradius; }; intmain() {Point*p=newCircle(2,1,4); deletep; return0; } 4.写一个程序,定义抽象基类Shape,由它派生出3个派生类: Circle,Rectangle,Triangle....... #include usingnamespacestd; classShape {public: virtualdoublearea()const=0; }; classCircle: publicShape {public: Circle(doubler): radius(r){} virtualdoublearea()const{return3.14159*radius*radius;} protected: doubleradius; }; classRectangle: publicShape {public: Rectangle(doublew,doubleh): width(w),height(h){} virtualdoublearea()const{returnwidth*height;} protected: doublewidth,height; }; classTriangle: publicShape {public: Triangle(doublew,doubleh): width(w),height(h){} virtualdoublearea()const{return0.5*width*height;} protected: doublewidth,height; }; voidprintArea(constShape&s) {cout< intmain() { Circlecircle(12.6); cout<<"areaofcircle="; printArea(circle); Rectanglerectangle(4.5,8.4); cout<<"areaofrectangle="; printArea(rectangle); Triangletriangle(4.5,8.4); cout<<"areaoftriangle="; printArea(triangle); return0; } 5.写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle,Square,Rectangle,Trapezoid,Triangle....... #include usingnamespacestd; classShape {public: virtualdoublearea()const=0; }; classCircle: publicShape {public: Circle(doubler): radius(r){} virtualdoublearea()const{return3.14159*radius*radius;}; protected: doubleradius; }; classSquare: publicShape {public: Square(doubles): side(s){} virtualdoublearea()const{returnside*side;} protected: doubleside; }; classRectangle: publicShape {public: Rectangle(doublew,doubleh): width(w),height(h){} virtualdoublearea()const{returnwidth*height;} protected: doublewidth,height; }; classTrapezoid: publicShape {public: Trapezoid(doublet,doubleb,doubleh): top(t),bottom(t),height(h){} virtualdoublearea()const{return0.5*(top+bottom)*height;} protected: doubletop,bottom,height; }; classTriangle: publicShape {public: Triangle(doublew,doubleh): width(w),height(h){} virtualdoublearea()const{return0.5*width*height;} protected: doublewidth,height; }; intmain() { Circlecircle(12.6); Squaresquare(3.5); Rectanglerectangle(4.5,8.4); Trapezoidtrapezoid(2.0,4.5,3.2); Triangletriangle(4.5,8.4); Shape*pt[5]={&circle,&square,&rectangle,&trapezoid,&triangle}; doubleareas=0.0; for(inti=0;i<5;i++) areas=areas+pt[i]->area(); cout<<"totolofallareas="< return0; } 第13章输入输出流 1.输入三角形的三边a,b,c,计算三角形的面积的公式是..... #include #include usingnamespacestd; intmain() {doublea,b,c,s,area; cout<<"pleaseinputa,b,c: "; cin>>a>>b>>c; if(a+b<=c) cerr<<"a+b<=c,error! "< elseif(b+c<=a) cerr<<"b+c<=a,error! "< elseif(c+a<=b) cerr<<"c+a<=b,error! "< else {s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); cout<<"area="< return0; } 2.从键盘输入一批数值,要求保留3位小数,在输出时上下行小数点对齐。 #include #include usingnamespacestd; intmain() {floata[5]; cout<<"inputdata: "; for(inti=0;i<5;i++) cin>>a[i]; cout< : fixed)< (2); for(i=0;i<5;i++) cout< return0; } 3.编程序,在显示屏上显示一个由字母B组成的三角形。 #include usingnamespacestd; voidmain(){ inti,j,k; for(i=0;i<8;i++){ for(j=0;j<7-i;j++) cout<<""; for(k=0;k<2*i+1;k++) cout<<"B"; cout< } } 4.建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作: #include #include usingnamespacestd; voidfun1() {inta[10]; ofstreamoutfile1("f1.dat"),outfile2("f2.dat"); if(! outfile1) {cerr<<"openf1.daterror! "< exit (1); } if(! outfile2) {cerr<<"openf2.daterror! "< exit (1); } cout<<"enter10integernumbers: "< for(inti=0;i<10;i++) {cin>>a[i]; outfile1< cout<<"enter10integernumbers: "< for(i=0;i<10;i++) {cin>>a[i]; outfile2< outfile1.close(); outfile2.close(); } voidfun2() {ifstreaminfile("f1.dat"); if(! infile) {cerr<<"openf1.daterror! "< exit (1); } ofstreamoutfile("f2.dat",ios: : app); if(! outfile) {cerr<<"openf2.daterror! "< exit (1); } inta; for(inti=0;i<10;i++) {infile>>a; outfile< } infile.close(); outfile.close(); } voidfun3() {ifstreaminfile("f2.dat"); if(! infile) {cerr<<"openf2.daterror! "< exit (1); } inta[20]; inti,j,t; for(i=0;i<20;i++) infile>>a[i]; for(i=0;i<19;i++) for(j=0;j<19-i;j++) if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} infile.close(); ofstreamoutfile("f2.dat",ios: : out); if(! outfile) {cerr<<"openf2.daterror!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课后 习题 答案