设计一个平面几何体类,成员变量包括名称,面积,成员函数包括构造,析构函数,面积计算,信息显示,设计一个矩形类,其基类为平面几何体类,成员变量包括长宽,成员函数包括面积计算和信息显示,设计一个正方形类,其基类为矩形类,成员变量包括边长,成员函数包括面积计算和信息显示,用户可选择输入矩形活正方,根据用户输入的类型创建对象,并完成参数输入和面积计算,可输入任意数量的图形对象,用户终止输入后,把所有对象的信息以列表显示出来
时间: 2023-07-31 10:03:43 浏览: 100
下面是实现这个需求的代码,注释中有详细的说明:
```c++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 平面几何体类
class Geometry {
protected:
string name; // 名称
double area; // 面积
public:
// 构造函数
Geometry(string n = "Geometry") : name(n), area(0) {}
// 析构函数
virtual ~Geometry() {}
// 计算面积(纯虚函数)
virtual void calcArea() = 0;
// 显示信息
virtual void showInfo() {
cout << "名称:" << name << endl;
cout << "面积:" << area << endl;
}
};
// 矩形类(继承自平面几何体类)
class Rectangle : public Geometry {
private:
double length; // 长
double width; // 宽
public:
// 构造函数
Rectangle(double l = 0, double w = 0) : Geometry("Rectangle"), length(l), width(w) {}
// 计算面积
virtual void calcArea() {
area = length * width;
}
// 显示信息
virtual void showInfo() {
cout << "矩形:" << endl;
Geometry::showInfo();
cout << "长:" << length << endl;
cout << "宽:" << width << endl;
}
};
// 正方形类(继承自矩形类)
class Square : public Rectangle {
private:
double side; // 边长
public:
// 构造函数
Square(double s = 0) : Rectangle(s, s), side(s) {
name = "Square";
}
// 显示信息
virtual void showInfo() {
cout << "正方形:" << endl;
Rectangle::showInfo();
cout << "边长:" << side << endl;
}
};
int main() {
vector<Geometry*> vec; // 存储图形对象的指针
char type; // 图形类型
do {
cout << "请输入图形类型(R表示矩形,S表示正方形,Q表示结束):" << endl;
cin >> type;
Geometry* pGeom;
switch (type) {
case 'R': { // 矩形
double l, w;
cout << "请输入矩形的长和宽:" << endl;
cin >> l >> w;
pGeom = new Rectangle(l, w); // 创建矩形对象
break;
}
case 'S': { // 正方形
double s;
cout << "请输入正方形的边长:" << endl;
cin >> s;
pGeom = new Square(s); // 创建正方形对象
break;
}
case 'Q': // 结束
continue; // 跳出循环
default:
cout << "输入有误,请重新输入!" << endl;
continue; // 继续循环
}
pGeom->calcArea(); // 计算面积
vec.push_back(pGeom); // 将对象指针存入容器中
} while (type != 'Q');
// 显示所有图形的信息
for (auto it = vec.begin(); it != vec.end(); ++it) {
(*it)->showInfo();
cout << endl;
}
// 释放所有图形对象
for (auto it = vec.begin(); it != vec.end(); ++it) {
delete (*it);
}
return 0;
}
```
运行程序后,可以按照提示输入矩形或正方形的参数,输入 Q 结束输入。程序会根据用户输入的类型创建对象,并完成参数输入和面积计算,然后将对象的指针存入容器中。当用户结束输入后,程序会遍历容器并显示每个对象的信息。最后,程序会释放所有图形对象的内存。
阅读全文