编辑代码

#include <iostream>
using namespace std;
class Point
{
    public:
        Point(float x=0,float y=0);//有默认参数的构造函数
        void setPoint(float,float);                 //设置坐标值的成员函数
        float getX() const {return x;}              //读x坐标,getX函数为常成员函数
        float getY() const {return y;}              //读y坐标,getY函数为常成员函数
        friend ostream & operator<<(ostream &,const Point &);     //友元重载运算符"<<"
    protected:                                   //受保护成员
        float x,y;
};
//下面定义Point类的成员函数
//定义Point类的构造函数
Point::Point(float a,float b)                 //对x,y初始化
{x=a;y=b;}
//设置x和y的坐标值
void Point::setPoint(float a,float b)         //对x,y赋以新值
{x=a;y=b;}
//重载运算符<<,使之能输出点的坐标
ostream & operator<<(ostream &output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
   return output;
}

// int main()
// {
//     Point p(3.5,6.4);                               //建立Point类对象p,对x,y初始化
//     cout<<"x="<<p.getX()<<",y="<<p.getY()<<endl;    //输出p的坐标值x,y
//     p.setPoint(8.5,6.8);                            //重新设置p的坐标值
//     cout<<"p(new):"<<p<<endl;                       //用重载运算符<<输出p点坐标
// }

class Circle:public Point                //circle是Point类的公用派生类
{
    public:
        Circle(float x=0,float y=0,float r=0); //构造函数
        void setRadius(float);                 //设置半径值的函数
        float getRadius() const;               //读取半径值的函数
        float area() const;                   //计算圆面积的函数
        friend ostream &operator<<(ostream &,const Circle &);     //重载运算符"<<"
    protected:
        float radius;
};
//定义Circle类的构造函数,对圆心坐标和半径初始化
Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}
//定义设置半径值的函数
void Circle::setRadius(float r)
{radius=r;}
//定义读取半径值的函数
float Circle::getRadius() const {return radius;}
//定义计算圆面积的函数
float Circle::area() const
{return 3.14159*radius*radius;}
//重载运算符<<,使之按规定的形式输出圆的信息
ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.radius<<",area="<<c.area()<<endl;
  return output;}
// int main()
// {
//     Circle c(3.5,6.4,5.2);               //建立Circle类对象c并指定圆心坐标和半径
//     cout<<"original circle:\nx="<<c.getX()<<",y="<<c.getY()<<",r="
//     <<c.getRadius()<<",area="<<c.area()<<endl;     //输出圆心坐标、半径和面积
//     c.setRadius(7.5);                   //设置半径值
//     c.setPoint(5,5);                    //设置圆心坐标值x,y
//     cout<<"new circle:\n"<<c;           //用重载运算符<<输出圆对象的信息
//     Point &pRef=c;                      //pRef是Point类的引用,被c初始化 
//     cout<<"pRef:"<<pRef;                //输出pRef的信息
//     return 0;
// }
class Cylinder:public Circle//Cylinder是Circle的公用派生类
{
    public:
        Cylinder(float x=0,float y=0,float r=0,float h=0);   //构造函数
        void setHeight(float);                      //设置圆柱高的函数
        float getHeight() const;                    //读取圆柱高的函数
        float area() const;                         //计算圆表面积的函数
        float volume() const;                       //计算圆柱体积的函数
        friend ostream& operator<<(ostream&,const Cylinder&);  //重载运算符"<<"
    protected:
        float height;                               //圆柱高
};
//定义构造函数
Cylinder::Cylinder(float a,float b,float r,float h)  
 :Circle(a,b,r),height(h){}
//定义设置圆柱高的函数
void Cylinder::setHeight(float h){height=h;}
//定义读取圆柱高的函数
float Cylinder::getHeight() const {return height;}
//定义计算圆表面积的函数
float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}
//定义计算圆柱体积的函数
float 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<<"\narea="<<cy.area()<<",volume="<<cy.volume()<<endl;
   return output; 
 }

// int main()
// {
//     Cylinder cy1(3.5,6.4,5.2,10);         //定义Cylinder类对象cy1,并初始化
//     cout<<"original cylinder:\nx="<<cy1.getX()<<",y="<<cy1.getY()<<",r="
//         <<cy1.getRadius()<<",h="<<cy1.getHeight()<<"\narea="<<cy1.area()
//         <<",volume="<<cy1.volume()<<endl;  //用系统定义的运算符"<<"输出圆柱
//     //cy1的数据
//     cy1.setHeight(15);                     //设置圆柱高
//     cy1.setRadius(7.5);                    //设置圆半径
//     cy1.setPoint(5,5);                     //设置圆心坐标值x,y
//     cout<<"\nnew cylinder:\n"<<cy1;        //用重载运算符"<<"输出cy1的数据
//     Point &pRef=cy1;                       //pRef是Point类对象的引用 
//     cout<<"\npRef as a point:"<<pRef;      //pRef作为一个"点"输出
//     Circle &cRef=cy1;                      //cRef是Circle类对象的引用
//     cout<<"\ncRef as a Circle:"<<cRef;     //cRef作为一个"圆"输出
//     return 0;
// }