目录
题目
按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
源码
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
private:
double x, y;
public:
Point(double m, double n) : x(m), y(n) {}
~Point() {}
double getX() const { return x; }
double getY() const { return y; }
friend ostream &operator<<(ostream &os, const Point &p)
{
os << "(" << p.x << ", " << p.y << ")";
return os;
}
};
class Circle : public Point
{
private:
double r;
public:
Circle(double m, double n, double p) : Point(m, n), r(p) {}
~Circle() {}
double getR() const { return r; }
friend ostream &operator<<(ostream &os, const Circle &c)
{
os << "圆心坐标为: " << static_cast<Point>(c) << ", 圆半径为: " << c.r;
return os;
}
double area() const { return r * r * M_PI; }
};
class Cylinder : public Circle
{
private:
double h;
public:
Cylinder(double m, double n, double p, double q) : Circle(m, n, p), h(q) {}
~Cylinder() {}
double getH() { return h; }
friend ostream &operator<<(ostream &os, const Cylinder &cy)
{
os << "圆柱体底面为: " << static_cast<Circle>(cy) << ", 圆柱体高为: " << cy.h;
return os;
}
double area() const { return Circle::area() * 2 + h * 2 * M_PI * getR(); }
double volume() const { return Circle::area() * h; }
};
int main(void)
{
Point p(1.0, 2.0);
cout << "点的坐标为: " << p << endl;
Circle c(3.0, 4.0, 5.0);
cout << c << endl;
cout << "圆的面积为: " << c.area() << endl;
Cylinder cy(6.0, 7.0, 8.0, 9.0);
cout << cy << endl;
cout << "圆柱体表面积为: " << cy.area() << endl;
cout << "圆柱体体积为: " << cy.volume() << endl;
return 0;
}