声明类Shape以及它的3个派生类:Circle、Square、Rectangle,让用户自己输入半径、边长、长和宽,用虚函数分别计算几种图形的面积、周长,编写程序,建立基类指针数组,每个指针均指向一个派生类对象,利用基类指针 遍历元素对象,求取所有图形面积之和。
时间: 2023-07-10 22:24:23 浏览: 96
好的,我理解了你的问题。下面是这个问题的解答:
```c++
#include<iostream>
using namespace std;
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数,求面积
virtual double getPerimeter() = 0; // 纯虚函数,求周长
};
class Circle : public Shape {
private:
double radius; // 半径
public:
Circle(double r) {
radius = r;
}
double getArea() {
return 3.14 * radius * radius;
}
double getPerimeter() {
return 2 * 3.14 * radius;
}
};
class Square : public Shape {
private:
double length; // 边长
public:
Square(double l) {
length = l;
}
double getArea() {
return length * length;
}
double getPerimeter() {
return 4 * length;
}
};
class Rectangle : public Shape {
private:
double width, length; // 长和宽
public:
Rectangle(double w, double l) {
width = w;
length = l;
}
double getArea() {
return width * length;
}
double getPerimeter() {
return 2 * (width + length);
}
};
int main() {
Shape* shapes[3]; // 基类指针数组
double radius, length, width;
cout << "请输入圆的半径:";
cin >> radius;
shapes[0] = new Circle(radius);
cout << "请输入正方形的边长:";
cin >> length;
shapes[1] = new Square(length);
cout << "请输入长方形的长和宽:";
cin >> length >> width;
shapes[2] = new Rectangle(width, length);
double sum = 0;
for (int i = 0; i < 3; i++) {
sum += shapes[i]->getArea(); // 计算面积之和
}
cout << "所有图形的面积之和为:" << sum << endl;
return 0;
}
```
这是一个使用 C++ 实现的面向对象程序,定义了一个 Shape 类作为基类,以及三个派生类 Circle、Square、Rectangle 分别表示圆、正方形和长方形。每个派生类都实现了求面积和周长的纯虚函数。在主函数中,先让用户输入各种图形的参数,然后创建一个基类指针数组,每个指针都指向一个派生类对象。利用基类指针遍历元素对象,求取所有图形面积之和,并输出结果。
阅读全文