第11周-继承和派生-项目5-类族的设计

来源:互联网 发布:电气画图软件visio 编辑:程序博客网 时间:2024/09/21 06:35
/* * 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;class Point{public:    Point(double x=0,double y=0); //构造函数    void setPoint(double,double);                  //设置坐标值    double getX( ) const    {        return x;   //读x坐标    }    double getY( ) const    {        return y;   //读y坐标    }    friend ostream & operator<<(ostream &,const Point &);//重载运算符“<<”protected: //受保护成员    double x,y;};Point::Point(double a,double b){    x=a;    y=b;}void Point::setPoint(double a,double b){    x=a;    y=b;}ostream & operator<<(ostream &output,const Point &p){    output<<"("<<p.x<<","<<p.y<<")"<<endl;    return output;}class Circle:public Point   //circle是Point类的公用派生类{public:    Circle(double x=0,double y=0,double r=0);  //构造函数    void setRadius(double);                  //设置半径值    double getRadius( ) const;               //读取半径值    double area ( ) const;                   //计算圆面积    friend ostream &operator<<(ostream &,const Circle &);//重载运算符“<<”protected:    double radius;};Circle::Circle(double a,double b,double r):Point(a,b),radius(r) { }void Circle::setRadius(double r){    radius=r;}double Circle::getRadius( ) const{    return radius;}double Circle::area( ) const{    return 3.14*radius*radius;}ostream &operator<<(ostream &output,const Circle &c){    output<<"Center=("<<c.x<<", "<<c.y<<"), r="<<c.radius<<endl;    output<<"Area="<<c.area( )<<endl;    return output;}class Cylinder:public Circle{public:    Cylinder (double x=0,double y=0,double r=0,double h=0);//构造函数    void setHeight(double);                      //设置圆柱高    double getHeight( ) const;                    //读取圆柱高    double area( ) const;                         //计算圆柱表面积    double volume( ) const;                       //计算圆柱体积    friend ostream& operator<<(ostream&,const Cylinder&);//重载运算符“<<”protected:    double height;                               //圆柱高};Cylinder::Cylinder(double a,double b,double r,double h) :Circle(a,b,r),height(h) {}void Cylinder::setHeight(double h){    height=h;}double Cylinder::getHeight( ) const{    return height;}double Cylinder::area( ) const{    return 2*Circle::area( )+2*3.14159*radius*height;}double Cylinder::volume() const{    return Circle::area()*height;}ostream &operator<<(ostream &output,const Cylinder& cy){    output<<"Center=("<<cy.x<<","<<cy.y<<"), r="<<cy.radius<<", h="<<cy.height<<endl;    output<<"Area="<<cy.area( )<<", Volume="<<cy.volume( )<<endl;    return output;}int main( ){    Cylinder cy1(3.5,6.4,5.2,10);    cout<<"Original cylinder:\nx="<<cy1.getX( )<<", y="<<cy1.getY( )<<", r="        <<cy1.getRadius( )<<", h="<<cy1.getHeight( )<<endl;    cout<<"Area="<<cy1.area()<<",Volume="<<cy1.volume()<<endl;    cy1.setHeight(15);    cy1.setRadius(7.5);    cy1.setPoint(5,5);    cout<<endl;    cout<<"New cylinder:"<<cy1;    return 0;}


运行结果:

 

 

 

1 0
原创粉丝点击