完整题干:
下列shape类是一个表示形状的抽象类,area ()为求图形面积的函数。请从shape类派生
三角形类(triangle)、圆类(circles),利用用虚函数给出具体的求面积函数,并求它们的
和。要求用基类指针数组,使它的每一个元素指向一个派生类。
个人答案:
#include <iostream>
using namespace std;
class shape
{
public:
virtual double Area() = 0;
virtual void Setshape() = 0;
};
//三角形类
class Triangle :public shape
{
private:
float floor, high;
public:
Triangle();
~Triangle();
virtual double Area();
virtual void Setshape();
};
Triangle::Triangle()
{
}
Triangle::~Triangle()
{
cout << "三角形计算_clear" << endl;
}
double Triangle::Area()
{
return floor * high / 2;
}
void Triangle::Setshape()
{
cout << "输入三角形底和高" << endl;
cin >> floor;
cin >> high;
}
//圆形类
class Circle :public shape
{
private:
double r;
public:
Circle();
Circle(int r);
~Circle();
virtual double Area();
virtual void Setshape();
};
Circle::Circle()
{
}
Circle::Circle(int R)
{
this->r = R;
}
Circle::~Circle()
{
cout << "圆形计算_clear" << endl;
}
double Circle::Area()
{
return 3.1415 * r * r;
}
void Circle::Setshape()
{
cout << "输入圆的半径" << endl;
cin >> r;
}
class Total_Area :public Triangle, public Circle
{
public:
Total_Area();
~Total_Area();
double allArea(shape* a, shape* b);
};
Total_Area::Total_Area()
{
}
Total_Area::~Total_Area()
{
cout << "总面积计算_Clear" << endl;
}
double Total_Area::allArea(shape* a, shape* b)
{
double area;
area = a->Area() + b->Area() ;
return area;
}
int main()
{
Triangle triangle;
triangle.Setshape();
cout << "三角形面积: " << triangle.Area() << endl;
cout << '\n';
Circle circle;
circle.Setshape();
cout << "圆面积: " << circle.Area() << endl;
cout << '\n';
Total_Area allArea;
cout << "总面积是: " << allArea.allArea(&triangle, &circle) << endl;
cout << '\n';
}
结果: