编一个程序,以直线段、矩形和圆为基本图元组成一图形。 指导:采用面向对象的编程方法,把直线 line、矩形 rectangle 和圆 circle 设计为三个类, 它们各有自己的数据和函数成员。用线、矩形和圆组合成图形,就是对这三个类的对象进行 操作。
时间: 2024-02-13 07:00:51 浏览: 65
好的,这是一个很好的编程练习题。我可以为你提供一些思路和指导。
首先,我们需要定义三个类:Line、Rectangle和Circle。每个类都应该有自己的数据成员和函数成员,用于表示和操作该对象。例如,Line类可以有起点和终点坐标,以及计算长度的函数;Rectangle类可以有左上角和右下角坐标,以及计算面积和周长的函数;Circle类可以有圆心坐标和半径,以及计算面积和周长的函数。
接下来,我们需要定义一个图形类,用于组合直线、矩形和圆。这个类应该有一个存储直线、矩形和圆对象的容器,以及一些函数成员,用于添加和删除对象,计算面积和周长等操作。
最后,我们需要编写一个测试程序,用于创建图形对象并进行操作。例如,我们可以创建一个矩形对象,然后向图形容器中添加该矩形对象,再创建一个圆对象并添加到容器中,最后计算整个图形的面积和周长。
以下是一个示例代码,仅供参考:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class Point {
public:
double x, y;
Point() : x(0), y(0) {}
Point(double x_, double y_) : x(x_), y(y_) {}
double distance(const Point& p) const {
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
class Line {
public:
Point p1, p2;
Line(const Point& p1_, const Point& p2_) : p1(p1_), p2(p2_) {}
double length() const {
return p1.distance(p2);
}
};
class Rectangle {
public:
Point p1, p2;
Rectangle(const Point& p1_, const Point& p2_) : p1(p1_), p2(p2_) {}
double area() const {
return abs((p1.x - p2.x) * (p1.y - p2.y));
}
double perimeter() const {
return 2 * (abs(p1.x - p2.x) + abs(p1.y - p2.y));
}
};
class Circle {
public:
Point center;
double radius;
Circle(const Point& center_, double radius_) : center(center_), radius(radius_) {}
double area() const {
return M_PI * pow(radius, 2);
}
double perimeter() const {
return 2 * M_PI * radius;
}
};
class Shape {
private:
vector<Line> lines;
vector<Rectangle> rectangles;
vector<Circle> circles;
public:
void addLine(const Line& line) {
lines.push_back(line);
}
void addRectangle(const Rectangle& rectangle) {
rectangles.push_back(rectangle);
}
void addCircle(const Circle& circle) {
circles.push_back(circle);
}
double area() const {
double totalArea = 0;
for (const auto& rectangle : rectangles) {
totalArea += rectangle.area();
}
for (const auto& circle : circles) {
totalArea += circle.area();
}
return totalArea;
}
double perimeter() const {
double totalPerimeter = 0;
for (const auto& line : lines) {
totalPerimeter += line.length();
}
for (const auto& rectangle : rectangles) {
totalPerimeter += rectangle.perimeter();
}
for (const auto& circle : circles) {
totalPerimeter += circle.perimeter();
}
return totalPerimeter;
}
};
int main() {
Shape myShape;
Rectangle myRectangle(Point(0, 0), Point(4, 3));
Circle myCircle(Point(5, 5), 2);
myShape.addRectangle(myRectangle);
myShape.addCircle(myCircle);
cout << "Area: " << myShape.area() << endl;
cout << "Perimeter: " << myShape.perimeter() << endl;
return 0;
}
```
这个程序演示了如何使用面向对象的方法来组合直线、矩形和圆,计算组合图形的面积和周长。你可以根据自己的需要进行修改和扩展。
阅读全文