15第10一周项目四——类族的设计
15第十一周项目四——类族的设计
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 5 月 19 日
* 版 本 号:v1.0
*
* 问题描述:按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
(提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目)
* 输入描述:输入一个点的坐标、半径以及高。
* 程序输出:点的坐标,圆的半径,圆的面积和圆柱的体积
*/
#include <iostream> using namespace std; double const PI=3.14; class Point { public: Point(double a=0,double b=0):x(a),y(b){} friend ostream& operator<<(ostream& out,const Point &p); protected: double x,y; }; class Circle:public Point { public: Circle(double a=0,double b=0,double r=0):Point(a,b),radius(r){} double area()const; friend ostream& operator<<(ostream& out,const Circle &c); protected: double radius; }; class Cylinder:public Circle { public: Cylinder(double a=0,double b=0,double r=0,double h=0):Circle(a,b,r),height(h){} double volume() const; friend ostream& operator<<(ostream& out,const Cylinder &cc); protected: double height; }; ostream& operator<<(ostream& out,const Point &p) { out<<"("<<p.x<<","<<p.y<<")"<<endl; return out; } double Circle::area() const { double a; a=PI*radius*radius; return a; } ostream& operator<<(ostream& out,const Circle& c) { out<<"("<<c.x<<","<<c.y<<")"<<'\n'; out<<"radius="<<c.radius<<'\n'; out<<"area="<<c.area()<<'\n'; return out; } ostream& operator<<(ostream& out,const Cylinder& cc) { out<<"center point:"<<"("<<cc.x<<","<<cc.y<<")"<<endl; out<<"radius="<<cc.radius<<'\n'; out<<"height="<<cc.height<<'\n'; out<<"area="<<cc.area()<<'\n'; out<<"volune="<<cc.volume()<<'\n'; return out; } double Cylinder::volume() const { double v; v=PI*radius*radius*height; return v; } int main() { Cylinder cy1(3,4,5,6); cout<<"old Cylinder:"<<endl; cout<<cy1<<endl; cout<<"new Cylinder:"<<'\n'<<"\please input a center point,radius and height:\n"; double x,y,radius,height; cin>>x>>y>>radius>>height; Cylinder cy2(x,y,radius,height); cout<<cy2<<endl; return 0; }