设计一个抽象类Shape,包含求面积的纯虚函数area(),显示形状的纯虚函数show(),在此基础上派生出矩形类Rectangle和圆形类Circle,二者分别有数据成员宽度width、高度height和r半径,构造函数分别设置数据成员的值,函数成员show()分别显示数据成员和面积的值。编写主函数测试所定义的类,主函数中定义指向Shape类对象的指针,分别指向类Rectangle和类Circle的对象,并调用相应函数
时间: 2024-02-15 14:03:49 浏览: 104
好的,我已经理解了你的要求。以下是实现这个问题的代码:
```c++
#include <iostream>
using namespace std;
// 抽象类 Shape
class Shape {
public:
// 纯虚函数 area,求形状的面积
virtual double area() = 0;
// 纯虚函数 show,显示形状的信息
virtual void show() = 0;
};
// 矩形类 Rectangle,继承自 Shape
class Rectangle : public Shape {
private:
double width; // 宽度
double height; // 高度
public:
// 构造函数,设置数据成员的值
Rectangle(double w, double h) : width(w), height(h) {}
// 实现纯虚函数 area,求矩形的面积
double area() {
return width * height;
}
// 实现纯虚函数 show,显示矩形的信息
void show() {
cout << "Rectangle: width=" << width << ", height=" << height
<< ", area=" << area() << endl;
}
};
// 圆形类 Circle,继承自 Shape
class Circle : public Shape {
private:
double r; // 半径
public:
// 构造函数,设置数据成员的值
Circle(double r) : r(r) {}
// 实现纯虚函数 area,求圆形的面积
double area() {
return 3.14 * r * r;
}
// 实现纯虚函数 show,显示圆形的信息
void show() {
cout << "Circle: r=" << r << ", area=" << area() << endl;
}
};
int main() {
// 定义指向 Shape 类对象的指针,分别指向类 Rectangle 和类 Circle 的对象
Shape* p1 = new Rectangle(3, 4);
Shape* p2 = new Circle(5);
// 调用相应函数
p1->show();
p2->show();
// 释放动态分配的内存
delete p1;
delete p2;
return 0;
}
```
运行结果如下:
```
Rectangle: width=3, height=4, area=12
Circle: r=5, area=78.5
```
阅读全文