c++,定义一个抽象类Shape,并派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。在主函数中定义一个Shape指针数组分别指向Rectangel和Circle的对象,并通过Shape类的指针数组实现对这两个对象的成员函数的调用,计算半径为5.5的圆和边长为9.9的正方形的面积。请写出这三个类和主函数
时间: 2023-06-10 19:07:24 浏览: 142
```c
#include<iostream>
using namespace std;
// 抽象类Shape
class Shape {
public:
virtual void modify() = 0; // 修改数据成员的函数
virtual void display() = 0; // 显示数据成员的函数
virtual double getArea() = 0; // 计算面积的函数
};
// 圆类Circle,继承自Shape类
class Circle : public Shape {
public:
Circle(double r) : radius(r) {} // 构造函数
void modify() { // 修改数据成员的函数
cout << "请输入圆的半径:";
cin >> radius;
}
void display() { // 显示数据成员的函数
cout << "圆的半径为:" << radius << endl;
}
double getArea() { // 计算面积的函数
return 3.14 * radius * radius;
}
private:
double radius; // 数据成员,半径
};
// 正方形类Square,继承自Shape类
class Square : public Shape {
public:
Square(double a) : a(a) {} // 构造函数
void modify() { // 修改数据成员的函数
cout << "请输入正方形的边长:";
cin >> a;
}
void display() { // 显示数据成员的函数
cout << "正方形的边长为:" << a << endl;
}
double getArea() { // 计算面积的函数
return a * a;
}
private:
double a; // 数据成员,边长
};
int main() {
Shape *shapes[2]; // Shape类的指针数组,指向Rectangle和Circle的对象
Circle c(5.5); // 创建一个半径为5.5的圆
Square s(9.9); // 创建一个边长为9.9的正方形
shapes[0] = &c; // 指针数组的第一个元素指向圆的对象
shapes[1] = &s; // 指针数组的第二个元素指向正方形的对象
for (int i = 0; i < 2; i++) { // 遍历指针数组,调用对象的成员函数
shapes[i]->display(); // 显示数据成员的值
cout << "面积为:" << shapes[i]->getArea() << endl; // 计算并显示面积
shapes[i]->modify(); // 修改数据成员的值
shapes[i]->display(); // 显示修改后的数据成员的值
cout << "面积为:" << shapes[i]->getArea() << endl; // 计算并显示面积
}
return 0;
}
```
阅读全文