- 类族的设计】
按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
(提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目)[参考解答]
1 /*
2 *Copyright (c)2014,烟台大学计算机与控制工程学院
3 *All rights reserved.
4 *文件名称:d.cpp
5 *作 者:张旺华
6 *完成日期:2015年6月1日
7 *版 本 号:v1.0
8 */
9 #include <iostream>
10
11 using namespace std;
12 const double pi=3.1415926;
13 class Point
14 {
15 public:
16 Point (double X=0,double Y=0):x(X),y(Y){}
17 ~Point();
18 void setPoint(double,double);
19 double getx()const {return x;};
20 double gety()const {return y;};
21 friend ostream &operator<<(ostream &output,Point & p);
22 protected:
23 double x,y;
24 };
25 Point::~Point()
26 {}
27 void Point::setPoint(double a,double b)
28 {
29 x=a;
30 y=b;
31 }
32 ostream &operator<<(ostream &output,Point & p)
33 {
34 output<<"["<<p.x<<","<<p.y<<"]";
35 return output;
36 }
37 class Circle: public Point
38 {
39 public :
40 Circle(double a=0,double b=0,double r=0);
41 ~Circle();
42 void setCircle(double a,double b,double r);
43 void setRadius(double r) { R=r;}
44 double getRadius(){return R;}
45 double area()const {return pi*R*R;}
46 double girth()const {return pi*R*2;}
47 friend ostream &operator<<(ostream &output,Circle & c);
48 protected:
49 double R;
50 };
51 Circle::~Circle(){}
52 void Circle::setCircle(double a,double b,double r)
53 {
54 Point(a,b);
55 R=r;
56 }
57 Circle::Circle(double a,double b,double r):Point(a,b),R(r){}
58
59 ostream &operator<<(ostream &output,Circle & c)
60 {
61 output<<"R="<<c.R<<" Center=["<<c.x<<", "<<c.y<<"], r="<<c.R<<" area="<<c.area()<<" girth="<<c.girth();
62 }
63 class Cylinder:public Circle
64 {
65 public:
66 Cylinder (double x=0,double y=0,double r=0,double h=0);//构造函数
67 void setHeight(double); //设置圆柱高
68 double getHeight( ) const; //读取圆柱高
69 double area( ) const; //计算圆柱表面积
70 double volume( ) const; //计算圆柱体积
71 friend ostream& operator<<(ostream&,const Cylinder&);//重载运算符“<<”
72 protected:
73 double height; //圆柱高
74 };
75
76 //定义构造函数
77 Cylinder::Cylinder(double a,double b,double r,double h) :Circle(a,b,r),height(h){}
78
79 //设置圆柱高
80 void Cylinder::setHeight(double h)
81 {
82 height=h;
83 }
84
85 //读取圆柱高
86 double Cylinder::getHeight( ) const
87 {
88 return height;
89 }
90
91 //计算圆柱表面积
92 double Cylinder::area( ) const
93 {
94 return 2*Circle::area( )+2*Circle::girth()*height;
95 }
96
97 //计算圆柱体积
98 double Cylinder::volume() const
99 {
100 return Circle::area()*height;
101 }
102
103 //重载运算符“<<”
104 ostream &operator<<(ostream &output,const Cylinder& cy)
105 {
106 output<<"Center=["<<cy.x<<","<<cy.y<<"], r="<<cy.R<<", h="<<cy.height
107 <<"narea="<<cy.area( )<<", volume="<<cy.volume( )<<endl;
108 return output;
109 }
110
111 int main( )
112 {
113 Cylinder cy1(3.5,6.4,5.2,10);
114 cout<<"noriginal cylinder:nx="<<cy1.getx( )<<", y="<<cy1.gety( )<<", r="
115 <<cy1.getRadius( )<<", h="<<cy1.getHeight( )<<"narea="<<cy1.area()
116 <<",volume="<<cy1.volume()<<endl;
117 cy1.setHeight(15);
118 cy1.setRadius(7.5);
119 cy1.setPoint(5,5);
120 cout<<"nnew cylinder:n"<<cy1;
121 return 0;
122 }
运行结果:
知识点运用及学习心得:
这个加强 对构造函数含有派生和继承关系的理解
原文链接: https://www.cnblogs.com/zhangwanghua/p/4544635.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/217003
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!