定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。
时间: 2024-03-23 16:39:56 浏览: 156
好的,这是一个关于C++面向对象编程的问题。下面是代码实现:
```c++
#include<iostream>
using namespace std;
//定义抽象基类Shape
class Shape{
public:
virtual double getArea() = 0; //纯虚函数
};
//圆形类
class Circle : public Shape{
private:
double radius;
public:
Circle(double r) : radius(r){}
double getArea(){
return 3.14 * radius * radius;
}
};
//正方形类
class Square : public Shape{
private:
double side;
public:
Square(double s) : side(s){}
double getArea(){
return side * side;
}
};
//矩形类
class Rectangle : public Shape{
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w){}
double getArea(){
return length * width;
}
};
//梯形类
class Trapezoid : public Shape{
private:
double upper;
double lower;
double height;
public:
Trapezoid(double u, double l, double h) : upper(u), lower(l), height(h){}
double getArea(){
return (upper + lower) * height / 2;
}
};
//三角形类
class Triangle : public Shape{
private:
double base;
double height;
public:
Triangle(double b, double h) : base(b), height(h){}
double getArea(){
return base * height / 2;
}
};
int main(){
const int numShapes = 5; //图形数量
Shape* shapes[numShapes]; //基类指针数组
double totalArea = 0; //总面积
shapes[0] = new Circle(5); //圆形
shapes[1] = new Square(3); //正方形
shapes[2] = new Rectangle(4, 6); //矩形
shapes[3] = new Trapezoid(3, 5, 4); //梯形
shapes[4] = new Triangle(4, 5); //三角形
//计算总面积
for(int i = 0; i < numShapes; i++){
totalArea += shapes[i]->getArea();
}
//输出结果
cout << "Total area: " << totalArea << endl;
//释放内存
for(int i = 0; i < numShapes; i++){
delete shapes[i];
}
return 0;
}
```
代码中定义了一个抽象基类Shape,它有一个纯虚函数getArea(),用于求图形面积。然后派生出5个图形类,分别实现getArea()函数。在主函数中,定义了一个基类指针数组,每个元素指向一个派生类对象,然后遍历数组,计算所有图形的面积之和。最后释放内存。
阅读全文