抽象类的应用

定义一个抽象类CShape,包含纯虚函数 Area(用来计算面积)和SetData(用来重设形状大小)。然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。最后通过友元的方式计算这几个形状对象的面积之和





#include
using namespace std;

class CShape
{
public:
virtual float Area()=0;//设置2个纯虚函数,让输入与计算均通过虚函数计算
virtual void input()=0;
void SetData(CShape *q[],int n)
{
cout<<"请重新设定形状与大小!"<delete q[n];//删去上一个要修改重置的对象指针,在下一步中在新建一个指针;
q[n] = NULL;
}
};
class CTriangle:public CShape
{
public:
void input()
{
cout<<"请输入三角形的底边和高:";
cin>>m_dibian>>m_high;
}
float Area()
{
return(float)(m_high*m_dibian*0.5);
}
friend float mianji(CShape *q[3]);
private:
float m_high, m_dibian;
};
class CRect:public CShape
{
public:
void input()
{
cout<<"请输入矩形的长和宽:"<cin>>r_chang>>r_high;
}
float Area()
{
return(float)(r_high * r_chang);
}
friend float mianji(CShape *q[3]);
private:
float r_high,r_chang;;
};
class CCircle:public CShape
{
public:
void input()
{
cout<<"请输入园的半径:";
cin>>m_r;
}
float Area()
{
return(float)(2*3.14*m_r*m_r);
}
friend float mianji(CShape *q[3]);
private:
float m_r;
};
float mianji(CShape *q[3])
{
float mj=0;
for (int i = 0;i < 3;i++)
{
mj = mj + q[i]->Area();
}
return mj;
}
void main()
{

int flag,m = 0;

CShape *p[3];//先确定3个基类对象指针

cout<<"###############################"<cout<<"1.三角形"<cout<<"2.矩形"<cout<<"3.园"<cout<<"4.重新设定此次选择的形态大小!"<cout<<"###############################"<

do
{
cout<<"请选择你要输入的图形的序号:";
cin>>flag;

if(flag == 1)//根据用户选择,对3个对象指针分别初始起派生类型
{
p[m] = new CTriangle();
}
else if (flag == 2)
{
p[m] = new CRect();
}
else if (flag == 3)
{
p[m] = new CCircle();
}
else if (flag == 4)
{
p[m--]->SetData(p,m);
m--;
}
else
{
cout<<"您输入的序号错误,请重新输入!";
m--;
}
m++;
}while(m != 3);

for (int i = 0;i<3;i++)
{
p[i]->input();
cout<<"其面积是:";
cout<Area()<}
cout<<"三个图形的面积之和是:";
cout<
for (int i = 0;i<3;i++)
{
delete p[i];
p[i]=NULL;
}

}

相关文档
最新文档