声明类Shape以及它的3个派生类:Circle、Square、Rectangle, 用虚函数分别计算几种图形的面积、周长,编写程序,建立基 类指针数组,每个指针均指向一个派生类对象,利用基类指针 遍历元素对象,求取所有图形面积之和
时间: 2024-02-22 17:54:57 浏览: 136
接口的应用Shape类,Rectangle、Triangle、Square
好的,我理解了你的要求。下面是代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double getArea() const = 0;
virtual double getPerimeter() const = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() const override {
return M_PI * radius * radius;
}
double getPerimeter() const override {
return 2 * M_PI * radius;
}
};
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double getArea() const override {
return side * side;
}
double getPerimeter() const override {
return 4 * side;
}
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() const override {
return width * height;
}
double getPerimeter() const override {
return 2 * (width + height);
}
};
int main() {
Shape* shapes[3];
shapes[0] = new Circle(5.0);
shapes[1] = new Square(4.0);
shapes[2] = new Rectangle(3.0, 5.0);
double totalArea = 0.0;
for (int i = 0; i < 3; i++) {
totalArea += shapes[i]->getArea();
}
cout << "Total area: " << totalArea << endl;
for (int i = 0; i < 3; i++) {
delete shapes[i];
}
return 0;
}
```
这个程序定义了一个抽象基类 `Shape`,其中定义了两个纯虚函数 `getArea()` 和 `getPerimeter()`,分别用于计算图形的面积和周长。然后定义了三个派生类 `Circle`、`Square` 和 `Rectangle`,分别实现了这两个函数。在 `main()` 函数中,定义了一个 `Shape` 类型的指针数组,每个指针指向一个派生类对象,然后遍历这个数组,计算出所有图形的面积之和。最后,记得释放动态分配的内存。
阅读全文