c++中提取二维形状的共同特征,运用类的继承与派生有关内容定义一个基类Shape,在此基础上派生出Rectangle类和Cirle类,进而派生Square类和Cirle类,其中Square继承于Rectangle类,Cirle类继承于Circle类,实现Rectangle类、Circle类、Square类和Circle类都能进行周长与面积的计算。设计一个完整的代码,要求带有注释与解析,从键盘接收数据并输出
时间: 2024-03-26 15:35:13 浏览: 60
好的,我了解了你的问题。下面是一个基于 C++ 的代码实现,实现了 Shape 基类、Rectangle 类、Circle 类和 Square 类,它们都能进行周长与面积的计算,并且从键盘接收数据并输出。
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// Shape 基类
class Shape {
public:
virtual double area() = 0; // 纯虚函数,用于计算面积
virtual double perimeter() = 0; // 纯虚函数,用于计算周长
};
// Rectangle 类
class Rectangle : public Shape {
protected:
double width;
double height;
public:
Rectangle(double w, double h) {
width = w;
height = h;
}
virtual double area() {
return width * height;
}
virtual double perimeter() {
return (width + height) * 2;
}
};
// Circle 类
class Circle : public Shape {
protected:
double radius;
public:
Circle(double r) {
radius = r;
}
virtual double area() {
return M_PI * radius * radius;
}
virtual double perimeter() {
return 2 * M_PI * radius;
}
};
// Square 类
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
};
// Main 函数
int main() {
double w, h, r, s;
cout << "请输入矩形的宽和高:";
cin >> w >> h;
Rectangle rect(w, h);
cout << "矩形的周长为:" << rect.perimeter() << endl;
cout << "矩形的面积为:" << rect.area() << endl;
cout << "请输入圆的半径:";
cin >> r;
Circle circle(r);
cout << "圆的周长为:" << circle.perimeter() << endl;
cout << "圆的面积为:" << circle.area() << endl;
cout << "请输入正方形的边长:";
cin >> s;
Square square(s);
cout << "正方形的周长为:" << square.perimeter() << endl;
cout << "正方形的面积为:" << square.area() << endl;
return 0;
}
```
代码解析:
1. 首先定义了一个 Shape 基类,其中包含了两个纯虚函数 area 和 perimeter,用于计算形状的面积和周长。
2. 接着定义了 Rectangle 类和 Circle 类,它们分别继承自 Shape 基类,并实现了 area 和 perimeter 函数。Rectangle 类还包含了 width 和 height 两个成员变量,Circle 类则包含了 radius 成员变量。
3. 最后定义了 Square 类,它继承自 Rectangle 类,并通过构造函数初始化 width 和 height 为相同的值,用于表示正方形。
4. 在 main 函数中,通过从键盘输入数据来创建 Rectangle、Circle 和 Square 对象,并调用它们的 perimeter 和 area 函数来计算周长和面积,最后输出结果。
希望这个代码对你有所帮助!
阅读全文