C++中运用类的继承与派生等有关知识设计一个完整代码,计算矩形、正方形、三角形、圆形、椭圆的周长与面积,要求从键盘接收数据,并带有注释和解析
时间: 2024-01-26 17:02:10 浏览: 87
c++求三角形矩形圆形的周长与面积
5星 · 资源好评率100%
好的,以下是代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 基类Shape,包含公共的属性和方法
class Shape {
public:
virtual double getArea() = 0; // 获取面积的抽象方法
virtual double getPerimeter() = 0; // 获取周长的抽象方法
};
// 矩形类Rectangle,继承自Shape基类
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() override { return width * height; } // 计算矩形面积
double getPerimeter() override { return 2 * (width + height); } // 计算矩形周长
};
// 正方形类Square,继承自Rectangle类
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
double getArea() override { return Rectangle::getArea(); } // 计算正方形面积
double getPerimeter() override { return Rectangle::getPerimeter(); } // 计算正方形周长
};
// 三角形类Triangle,继承自Shape基类
class Triangle : public Shape {
private:
double a;
double b;
double c;
public:
Triangle(double sideA, double sideB, double sideC) : a(sideA), b(sideB), c(sideC) {}
double getArea() override { // 计算三角形面积
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
double getPerimeter() override { return a + b + c; } // 计算三角形周长
};
// 圆形类Circle,继承自Shape基类
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() override { return M_PI * radius * radius; } // 计算圆形面积
double getPerimeter() override { return 2 * M_PI * radius; } // 计算圆形周长
};
// 椭圆类Ellipse,继承自Shape基类
class Ellipse : public Shape {
private:
double a;
double b;
public:
Ellipse(double axisA, double axisB) : a(axisA), b(axisB) {}
double getArea() override { return M_PI * a * b; } // 计算椭圆面积
double getPerimeter() override {
double h = pow(a - b, 2) / pow(a + b, 2);
return M_PI * (a + b) * (1 + 3 * h / (10 + sqrt(4 - 3 * h)));
} // 计算椭圆周长
};
int main() {
// 接收数据
double width, height, sideA, sideB, sideC, radius, axisA, axisB;
cout << "请输入矩形的宽和高:";
cin >> width >> height;
cout << "请输入正方形的边长:";
cin >> sideA;
cout << "请输入三角形的三边长:";
cin >> sideA >> sideB >> sideC;
cout << "请输入圆形的半径:";
cin >> radius;
cout << "请输入椭圆的长轴和短轴:";
cin >> axisA >> axisB;
// 计算周长和面积
Rectangle rect(width, height);
Square square(sideA);
Triangle triangle(sideA, sideB, sideC);
Circle circle(radius);
Ellipse ellipse(axisA, axisB);
// 输出结果
cout << "矩形的周长为:" << rect.getPerimeter() << ",面积为:" << rect.getArea() << endl;
cout << "正方形的周长为:" << square.getPerimeter() << ",面积为:" << square.getArea() << endl;
cout << "三角形的周长为:" << triangle.getPerimeter() << ",面积为:" << triangle.getArea() << endl;
cout << "圆形的周长为:" << circle.getPerimeter() << ",面积为:" << circle.getArea() << endl;
cout << "椭圆的周长为:" << ellipse.getPerimeter() << ",面积为:" << ellipse.getArea() << endl;
return 0;
}
```
代码中定义了一个`Shape`基类,包含抽象的获取周长和面积的方法。其中,`Rectangle`、`Square`、`Triangle`、`Circle`和`Ellipse`等类继承自`Shape`基类,分别实现对应的周长和面积计算方法。在`main`函数中,从键盘接收数据后,分别用各个类的实例计算并输出结果。
阅读全文