定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。
时间: 2024-03-23 09:39:56 浏览: 162
声明一个图形基类并在它的基础上派生出其他类并编写程序实现各类的定义及实现
好的,这是一个关于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()函数。在主函数中,定义了一个基类指针数组,每个元素指向一个派生类对象,然后遍历数组,计算所有图形的面积之和。最后释放内存。
阅读全文