C++9月5日作业

1.定义一个图形类(class graphical)
包括受保护成员:周长(float perm)、面积(float area),成员函数,获取周长,获取面积
2.定义一个矩形类(class Rectangle)
继承自图形类,私有成员 : 长(float length)、宽(float wide)
3.定义圆类(class Circle)
继承自图形类,私有成员 : 半径(float radius)
4.定义三角形类(class Triangle)
继承自图形类, 私有成员 : 三条边。
①面积公式:√S=p*(p-a)*(p-b)*(p-c)
sqrt开根号头文件:#include<cmath>
②p:半周长(a + b + c)/2
5.定义一个全局函数,传入任意一个图形,输出该图型的周长和面积

代码:
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>

#define PI 3.14
#define p (perm/2)
#define ERROR(x) std::fabs(x) < 1e-6

//图形类
class graphical
{
    public:
        //无参构造函数
        graphical() :perm(0), area(0)
        {
            std::cout << "graphical 无参构造函数" << std::endl;
        }
        //析构函数
        ~graphical()
        {
            std::cout << "graphical 析构函数" << std::endl;
        }
        virtual void show() = 0;//纯虚函数

    protected:
        float perm;
        float area;
};


//矩形类
class Rectangle :public graphical
{
    public:
        //无参构造函数
        Rectangle() :length(0), wide(0)
        {
            std::cout << "Rectangle 无参构造函数" << std::endl;
        }
        //有参构造函数
        Rectangle(float l, float w) :length(std::fabs(l)), wide(std::fabs(w))
        {
            perm = length * 2 + wide * 2;
            area = length * wide;
            std::cout << "Rectangle 有参构造函数" << std::endl;
        }
        //析构函数
        ~Rectangle()
        {
            std::cout << "Rectangle 析构函数" << std::endl;
        }

        void show() override
        {
            if (ERROR(length)|| ERROR(wide))
            {
                std::cout << "输入无效数据" << std::endl;
            }
            else
            {
                std::cout << "矩形周长: C = " << perm << std::endl;
                std::cout << "矩形面积: S = " << area << std::endl;
            }
            std::cout << "Rectangle void show()" << std::endl;
        }

    private:
        float length;
        float wide;
};

//圆类
class Circle :public graphical
{
    public:
        //无参构造函数
        Circle() :radius(0)
        {
            std::cout << "Circle 无参构造函数" << std::endl;
        }
        //有参构造函数
        Circle(float r) : radius(std::fabs(r))
        {
            perm = 2 * PI * r;
            area = PI * r * r;
            std::cout << "Circle 有参构造函数" << std::endl;
        }
        //析构函数
        ~Circle()
        {
            std::cout << "Circle 析构函数" << std::endl;
        }

        void show() override
        {
            if (ERROR(radius))
            {
                std::cout << "输入无效数据" << std::endl;
            }
            else
            {
                std::cout << "圆形周长: C = " << perm << std::endl;
                std::cout << "圆形面积: S = " << area << std::endl;
            }
            std::cout << "Rectangle void show()" << std::endl;
        }

    private:
        float radius;
};

//三角形类
class Triangle :public graphical
{
    public:
        //无参构造函数
        Triangle() :a1(0), b2(1), c3(2)
        {
            std::cout << "Triangle 无参构造函数" << std::endl;
        }
        //有参构造函数
        Triangle(float a,float b,float c)
            :a1(std::fabs(a)),b2(std::fabs(b)),c3(std::fabs(c))
        {
            if (a + b <= c || a + c <= b || b + c <= a)
            {
                a1 = 0; b2 = 0; c3 = 0;
            }
            else
            {
                perm = a1 + b2 + c3;
                area = sqrt(p * (p - a1) * (p - b2) * (p - c3));
            }
            std::cout << "Triangle 有参构造函数" << std::endl;
        }
        //析构函数
        ~Triangle()
        {
            std::cout << "Triangle 析构函数" << std::endl;
        }

        void show() override
        {
            if (ERROR(a1) && ERROR(b2) && ERROR(c3))
            {
                std::cout << "三角形的两边之和要大于第三边" << std::endl;
            }
            else if (ERROR(a1) || ERROR(b2) || ERROR(c3))
            {
                std::cout << "输入无效数据" << std::endl;
            }
            else
            {
                std::cout << "三角形周长: C = " << perm << std::endl;
                std::cout << "三角形面积: S = " << area << std::endl;
            }
            std::cout << "Triangle void show()" << std::endl;
        }

    private:
        float a1;
        float b2;
        float c3;
};

void output_s_c(graphical& g)
{
    g.show();
    std::cout << "**************************" << std::endl;
    return;
}

int main(int argc, const char* argv[])
{
    Rectangle R1;
    output_s_c(R1);

    Rectangle R2(13.14,5.2);
    output_s_c(R2);

    Circle C1;
    output_s_c(C1);

    Circle C2(88.88);
    output_s_c(C2);

    Triangle T1;
    output_s_c(T1);

    Triangle T2(1.0,2.0,3.0);
    output_s_c(T2);

    Triangle T3(66.6,67.7,68.8);
    output_s_c(T3);

    return 0;
}
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值