先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高)。要求编写程序,重载运算符“<<”和“>>”,使之能用于输出以上类对象。
#include<iostream>
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;
}
friend ostream& operator<<(ostream&, const Point&);
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;
}
ostream& operator<<(ostream& output, const Point& p)
{
output << "[" << p.x << "," << p.y << "]" << endl;
return output;
}
class Circle :public 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(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 float(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;
}
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;
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 float(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.5f, 6.4f, 5.2f, 10);
cout << "original circle:\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 << "\nnew circle:\n" << cy1;
Point& pRef = cy1;
cout << "\npRef as a point:" << pRef;
Circle& cRef = cy1;
cout << "\ncRef as a Circle:" << cRef;
return 0;
}