#include <iostream>
#include <cmath>
using namespace std;
class Graphical
{
public:
Graphical(){}
Graphical(float P,float S):perm(P),area(S){}
~Graphical(){}
virtual float getperm()const=0;//周长的全虚函数
virtual float getarea()const=0;//面积的全虚函数
protected:
float perm;
float area;
};
//矩形
class Rectangle:public Graphical
{
public:
Rectangle(){
length=0;
wide=0;
}
Rectangle(float l,float w):length(l),wide(w){}
//析构函数
~Rectangle(){}
//矩形周长
float getperm() const override
{
return 2*(length+wide);
}
//矩形面积
float getarea() const override
{
return length*wide;
}
private:
float length;
float wide;
};
//圆形
class Circle:public Graphical
{
public:
Circle(){}
Circle(float r):radius(r){}
~Circle(){}
//圆形周长
float getperm()const override
{
return 2*3.14*radius;
}
//圆形面积
float getarea() const override
{
return 3.14*radius*radius;
}
private:
float radius;
};
//三角形
class Triangle:public Graphical
{
public:
Triangle(){}
Triangle(float a,float b,float c):a(a),b(b),c(c){}
~Triangle(){}
//重载算出三角形周长
float getperm() const override
{
return a+b+c;
}
//重载算出三角形面积
float getarea() const override
{
float P=1/2*(a+b+c);
return sqrt(P*(P-a)*(P-b)*(P-c));
}
private:
float a,b,c;
};
//全局函数
void display(const Graphical & gr)
{
cout<<"getPerm="<<gr.getperm()<<endl;
cout<<"getarea="<<gr.getarea()<<endl;
}
int main(int argc,const char *argv[])
{
Rectangle lw(6.0,4.0);
Circle cr(2.0);
Triangle tr(3.0,4.0,5.0);
cout<<"Rectangle:"<<endl;
display(lw);
cout<<"Circle:"<<endl;
display(cr);
cout<<"Triangle:"<<endl;
display(tr);
return 0;
}
运行