vc++ 应用纯虚函数的使用,定义几个派生类如三角形,矩形,圆形等,求出所有形状的总面积。
发布网友
发布时间:2022-04-26 21:42
我来回答
共1个回答
热心网友
时间:2023-11-06 14:33
/*Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和
求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle类和
Rectangle类,分别继承基类Shape的Circumference()和Area(),并增加新的成员。
编写主函数,定义各派生类对象,要求用一个函数实现求多派生类对象的周长之和、面积之和。*/
#include<iostream.h>
#include<math.h>
#define PI 3.1415926
class CShape
{
public:
virtual float Circumference()=0;
virtual float Area()=0;
};
class CCircle:public CShape
{
public:
CCircle(float r1)
{
r=r1;
}
float Circumference()
{
return (float)PI*r*2;
}
float Area()
{
return (float)PI*r*r;
}
private:
float r;
};
//L = pi(1.5(a+b)-sqrt(ab)), 其中a,b分别为椭圆长轴和短轴。
class CEllipse:public CShape
{
public:
CEllipse(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
float temp1=(float)(1.5)*(a+b);
float temp2=(float)sqrt(a*b);
return (float)PI*(temp1-temp2);
}
float Area()
{
return (float)PI*a*b;
}
private:
float a;
float b;
};
//Triangle面积公式
//s=根号下:p(p-a)(p-b)(p-c) 其中p=1/2(a+b+c) 这个公式叫海*式
class CTriangle:public CShape
{
public:
CTriangle(float a1,float b1,float c1)
{
a=a1;
b=b1;
c=c1;
}
float Circumference()
{
return (a+b+c);
}
float Area()
{
float p=(a+b+c)/2;
return (float)sqrt(p*(p-a)*(p-b)*(p-c));
}
private:
float a;
float b;
float c;
};
class CRectangle:public CShape
{
public:
CRectangle(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
return 2*(a+b);
}
float Area()
{
return (float)a*b;
}
private:
float a;
float b;
};
void main()
{
void sum(CShape *p[],int n,float &zc,float &mj);
CShape *p[4];
CCircle q(1.0);//圆
CEllipse w(2.0,1.0);//椭圆
CTriangle e(3.0,4.0,5.0);//三角形
CRectangle r(1.0,2.0);//长方形
p[0]=&q;
p[1]=&w;
p[2]=&e;
p[3]=&r;
float zc=0,mj=0;
sum(p,4,zc,mj);
cout<<"周长之和:"<<zc<<endl;
cout<<"面积之和:"<<mj<<endl;
}
void sum(CShape *p[4],int n,float &zc,float &mj)//分别计算周长,面积总和
{
for(int i=0;i<n;i++)
{
zc+=p[i]->Circumference();/*周长之和*/
mj+=p[i]->Area();/*面积之和*/
}
}
/*希望对你有帮助,上面是题目要求,应该跟你的差不多吧*/
热心网友
时间:2023-11-06 14:33
/*Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和
求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle类和
Rectangle类,分别继承基类Shape的Circumference()和Area(),并增加新的成员。
编写主函数,定义各派生类对象,要求用一个函数实现求多派生类对象的周长之和、面积之和。*/
#include<iostream.h>
#include<math.h>
#define PI 3.1415926
class CShape
{
public:
virtual float Circumference()=0;
virtual float Area()=0;
};
class CCircle:public CShape
{
public:
CCircle(float r1)
{
r=r1;
}
float Circumference()
{
return (float)PI*r*2;
}
float Area()
{
return (float)PI*r*r;
}
private:
float r;
};
//L = pi(1.5(a+b)-sqrt(ab)), 其中a,b分别为椭圆长轴和短轴。
class CEllipse:public CShape
{
public:
CEllipse(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
float temp1=(float)(1.5)*(a+b);
float temp2=(float)sqrt(a*b);
return (float)PI*(temp1-temp2);
}
float Area()
{
return (float)PI*a*b;
}
private:
float a;
float b;
};
//Triangle面积公式
//s=根号下:p(p-a)(p-b)(p-c) 其中p=1/2(a+b+c) 这个公式叫海*式
class CTriangle:public CShape
{
public:
CTriangle(float a1,float b1,float c1)
{
a=a1;
b=b1;
c=c1;
}
float Circumference()
{
return (a+b+c);
}
float Area()
{
float p=(a+b+c)/2;
return (float)sqrt(p*(p-a)*(p-b)*(p-c));
}
private:
float a;
float b;
float c;
};
class CRectangle:public CShape
{
public:
CRectangle(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
return 2*(a+b);
}
float Area()
{
return (float)a*b;
}
private:
float a;
float b;
};
void main()
{
void sum(CShape *p[],int n,float &zc,float &mj);
CShape *p[4];
CCircle q(1.0);//圆
CEllipse w(2.0,1.0);//椭圆
CTriangle e(3.0,4.0,5.0);//三角形
CRectangle r(1.0,2.0);//长方形
p[0]=&q;
p[1]=&w;
p[2]=&e;
p[3]=&r;
float zc=0,mj=0;
sum(p,4,zc,mj);
cout<<"周长之和:"<<zc<<endl;
cout<<"面积之和:"<<mj<<endl;
}
void sum(CShape *p[4],int n,float &zc,float &mj)//分别计算周长,面积总和
{
for(int i=0;i<n;i++)
{
zc+=p[i]->Circumference();/*周长之和*/
mj+=p[i]->Area();/*面积之和*/
}
}
/*希望对你有帮助,上面是题目要求,应该跟你的差不多吧*/