定义一个点类,派生出一个圆类,再由圆类派生出圆柱类。
代码如下:
#include <iostream>
#include<string>
using namespace std;
class Point
{
public:
Point(float x=0,float y=0);
void setPoint(float,float);
float getX( ) const {return x;}
float getY( ) const {return y;}
protected:
float x,y;
};
Point::Point(float a,float b)
{x=a;y=b;}
void Point::setPoint(float a,float b)
{x=a;y=b;}
class Circle: public Point
{public:
Circle(float x=0,float y=0,float r=0);
void setRadius(float);
float getRadius( ) const;
float area ( ) const;
protected:
float radius;
};
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;}
class Cylinder:public 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;
protected:
float height;
};
Cylinder::Cylinder(float a,float b,float r,float h)
: Circle(a,b,h) ,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;}
int main( )
{
Point p(3.5,6.4);
cout<<"x="<<p.getX( )<<",y="<< p.getY() <<endl;
p.setPoint(8.5,6.8);
cout<<"x="<< p.getX() <<",y="<< p.getY() <<endl;
Circle c(3.5,6.4,5.2);
cout<<"original circle:\nx="<<c.getX()<<", y="<<c.getY()<<", r="<< c.getRadius( )
<<", area="<< c.area() <<endl;
c.setRadius(7.5);
c.setPoint(5,5);
cout<<"original circle:\nx="<<c.getX()<<", y="<<c.getY()<<", r="<< c.getRadius( )
<<", area="<<c.area( )<<endl;
Cylinder cy1(3.5,6.4,5.2,10);
cout<<"\n cylinder:\nx="<<cy1.getX( )<<", y="<<cy1.getY( )<<", r="
<<cy1.getRadius( )<<", h="<<cy1.getHeight( )<<"\\narea="<<cy1.area()
<<",volume="<<cy1.volume() <<endl;
cy1.setHeight(15);
cy1.setRadius(7.5);
cy1.setPoint(5,5);
cout<<"\n cylinder:\nx="<<cy1.getX( )<<", y="<<cy1.getY( )<<", r="
<<cy1.getRadius( )<<", h="<<cy1.getHeight( )<<"\\narea="<<cy1.area()
<<",volume="<<cy1.volume()<<endl;
return 0;
}