【多级派生】(中北大学-程序设计基础(2))

目录

题目

源码

结果示例


题目

按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:

(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;
}

结果示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_漠_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值