// 定义一个抽象类CShape (至少有一个函数被声明为纯虚函数);
// 再利用CShape分别定义两个派生类CRectangle(矩形)和CCirle(圆),
//三个类都有计算面积的成员函数GetArea()和计算对象周长的成员函数GetPerimeter() ;
// 在主函数中声明基类指针和派生类对象,并通过基类指针调用不同对象的成员函数GetArea() 和GetPerimeter()。
//在第1题基础上再定义三个CShap的派生类CSquare(正方形)、CTrapezoid(梯形)、CTriangle(三角形);
//分别用虚函数计算五种图形的面积,并求它们的和;
//要求用基类指针数组,使它的每一个元素指向一个派生类。
#include<bits/stdc++.h>
using namespace std;
class CShape
{
public:
virtual double GetArea()=0;
virtual double GetPerimeter()=0;
};
class CRectangle:public CShape
{
private:
double length,width;
public:
CRectangle(double length_,double width_){
length=length_;
width=width_;
}
virtual double GetArea()
{
double p;
p=length*width;
cout<<"矩形的面积为:"<<p<<endl;
return p;
}
virtual double GetPerimeter(){
double c;
c=length+width;
cout<<"矩形的周长为:"<<c<<endl;
return c;
}
};
class CCircle:public CShape
{
private:
double r;
public:
CCircle(double r_){
r=r_;
}
virtual double GetArea()
{
double sq;
double pi=3.14;
sq=pi*r*r;
cout<<"圆的面积"<<sq<<endl;
return sq;
}
virtual double GetPerimeter(){
double sc;
double pi=3.14;
sc=2*pi*r;
cout<<"圆的周长"<<sc<<endl;
return sc;
}
};
class CSquare:public CShape{
double d;
public:
CSquare(double d_){
d=d_;
}
virtual double GetArea(){
double s;
s=d*d;
cout<<"正方形面积"<<s<<endl;
return s;
}
};
class CTriangle{
double m,n,t;//三角形三条边
public:
CTriangle(double m_,double n_,double t_):m(m_),n(n_),t(t_){
}
virtual double GetArea(){
double st,q;
q=(m+n+t)/2;
st=sqrt(q*(q-m)*(q-n)*(q-t));
cout<<"三角形面积"<<st<<endl;
return st;
}
};
class CTrapezoid:public CShape{
public:
CTrapezoid(double upper,double below,double traHeight):up(upper),down(below),th(traHeight){}
double up,down,th;
virtual double GetArea(){
double stp;
stp=(up+down)*th*0.5;
cout<<"梯形面积:"<<stp<<endl;
return stp;
}
};
int main(){
CCircle circle(1);
CSquare square(3.5);
CRectangle rectangle(4.6,7.8);
CTrapezoid trapezoid(2.7,4.5,3.1);
CTriangle triangle(3,4,5);
CShape *pt[5]={&circle,&square,&rectangle,&trapezoid,&triangle};
double areas=0;
for(int i=0;i<5;i++){
areas=areas+pt[i]->GetArea();
}
cout<<"总面积为:"<<areas<<endl;
return 0;
}
谢谢大家!