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;
}
运行结果: