您的位置:首页 > 其它

Chapter12——编写一个程序,求面积和

2017-05-09 16:44 197 查看
编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle,Square,Rectangle,Trapezoid,Triangle。用虚函数分别计算集中图形面积,并求他们之和。要求使用基类指针数组,使它每一个元素指向一个派生类对象。

这个题目和上一题比较相似,我就直接拿上题程序来用,忽略Square,Trapezoid类,程序如下:

#include<iostream>
using namespace std;
class Shape
{
public:
virtual double area()=0;
virtual void shapename()=0;
};
class Circle:public Shape
{
public:
Circle(double r=1):radius(r){}
virtual void shapename(){cout<<"Circle_area=";}
virtual double area(){return 3.14159*radius*radius;}
friend ostream&operator <<(ostream&,Circle&);
protected:
double radius;
};
ostream&operator <<(ostream&output,Circle&c)
{
output<<c.area()<<endl;
return output;
}
class Rectangle:public Shape
{
public:
Rectangle(double a=1,double b=1):length(a),width(b){}
virtual void shapename(){cout<<"Rectangle_area=";}
virtual double area(){return length*width;}
friend ostream&operator <<(ostream&,Rectangle&);
protected:
double length,width;
};
ostream&operator <<(ostream&output,Rectangle&re)
{
output<<re.area()<<endl;
return output;
}
class triangle:public Shape
{
public:
triangle(double a=1,double b=1):base(a),height(b){}
virtual void shapename(){cout<<"triangle_area=";}
virtual double area(){return 0.5*base*height;}
friend ostream&operator <<(ostream&,triangle&);
protected:
double base,height;
};
ostream&operator <<(ostream&output,triangle&tr)
{
output<<tr.area()<<endl;
return output;
}
void printArea(Shape **p,Circle a,Rectangle b, triangle c)
{
double sum=0;
p[0]=&a;
p[1]=&b;
p[2]=&c;
for(int i=0;i<3 i="" p="" i="" -="">shapename();
cout<<p i="" -="">area()<<endl sum="" p="" i="" -="">area();
}
cout<<"sum_area="<<sum<<endl<<endl;
}
int main()
{
Shape *p[3];
Circle c(10);
Rectangle r(5,10);
triangle t(3,4);
printArea(p,c,r,t);
return 0;
}
</endl></p></3></iostream>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐