#include <iostream>
#include <cmath>
using namespace std;
class Graphical{
protected :
float perm;
float area;
public:
Graphical(){
perm=0;area=0;
// cout<<"无参构造\n";
}
Graphical(float x,float y):perm(x),area(y){};
virtual ~Graphical(){}
virtual float get_perm(){
return perm;
}
virtual float get_area(){
return area;
}
};
class Rectangle : public Graphical{
private:
float length;
float wide;
public:
Rectangle(){length=0;wide=0;}
Rectangle(float x,float y){
if(x>=1e-7&&y>=1e-7){
length = x;
wide = y;
}else{
cout<<"参数有误!默认为0\n";
length = 0;
wide = 0;
}
}
~Rectangle(){}
float get_perm() override
{
perm = 2*(length+wide);
return perm;
}
float get_area() override
{
area = length*wide;
return area;
}
};
class Circle : public Graphical{
private:
float radius;
public:
Circle(){radius=0;}
Circle(float x){
if(x>=1e-7){
radius = x;
}else{
cout<<"参数有误!默认为0\n";
radius = 0;
}
}
~Circle(){}
float get_perm() override
{
perm = 3.14*2*radius;
return perm;
}
float get_area() override
{
area = 3.14*radius*radius;
return area;
}
};
class Triangle : public Graphical{
private:
float a,b,c;
public:
Triangle(){a=b=c=0;}
Triangle(float x,float y,float z){
if(x>=1e-7&&y>=1e-7&&z>=1e-7){
if(x+y>z&&x+z>y&&y+z>x)
{a = x;b = y;c = z;}
else
{a = b = c = 0;}
}else{
cout<<"参数有误!默认为0\n";
a = b = c = 0;
}
}
~Triangle(){}
float get_perm() override
{
perm = a+b+c;
return perm;
}
float get_area() override
{
float p = get_perm()/2.0;
area = sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"Triangle.area="<<area<<endl;
return area;
}
};
void show(Graphical* g){
cout<<"perm="<<g->get_perm()<<"area="<<g->get_area()<<endl;
}
int main(int argc, const char *argv[])
{
Graphical *g = NULL;
Rectangle r(6.0,2.0);
g = &r;
show(g);
Circle c(2.0);
g = &c;
show(g);
Triangle t(3.0,4.0,5.0);
g = &t;
show(g);
Triangle t2(5,12,13);
g = &t2;
show(g);
Triangle t3(0.3,0.4,0.5);
g = &t3;
show(g);
return 0;
}
c++第四次作业(2024.9.5)
于 2024-09-05 22:35:38 首次发布