#include <iostream>#include <cmath>class Point {private: double x; double y;public: Point(double _x, double _y) : x(_x), y(_y) {} double getX() const { return x; } double getY() const { return y; } double distanceTo(const Point& other) const { double dx = x - other.x; double dy = y - other.y; return std::sqrt(dx * dx + dy * dy); } double areaWith(const Point& a, const Point& b) const { double side1 = distanceTo(a); double side2 = distanceTo(b); double side3 = a.distanceTo(b); double s = (side1 + side2 + side3) / 2; return std::sqrt(s * (s - side1) * (s - side2) * (s - side3)); }};int main() { Point p1(0, 0); Point p2(3, 4); Point p3(6, 0); std::cout << "p1: (" << p1.getX() << ", " << p1.getY() << ")" << std::endl; std::cout << "p2: (" << p2.getX() << ", " << p2.getY() << ")" << std::endl; std::cout << "p3: (" << p3.getX() << ", " << p3.getY() << ")" << std::endl; std::cout << "Distance between p1 and p2: " << p1.distanceTo(p2) << std::endl; std::cout << "Distance between p2 and p3: " << p2.distanceTo(p3) << std::endl; std::cout << "Distance between p3 and p1: " << p3.distanceTo(p1) << std::endl; std::cout << "Area of triangle p1p2p3: " << p1.areaWith(p2, p3) << std::endl; return 0;}
时间: 2024-04-25 07:25:45 浏览: 7
这段代码定义了一个名为 Point 的类,表示一个平面上的点,其中包含了该点的 x 坐标和 y 坐标。它还定义了三个成员函数:getX() 和 getY() 分别返回该点的 x 坐标和 y 坐标;distanceTo() 接受一个 Point 类型的参数 other,返回该点与参数点之间的距离。
另外,类 Point 中还定义了一个成员函数 areaWith(),接受两个 Point 类型的参数 a 和 b,返回以该点、参数点 a 和参数点 b 为三个顶点的三角形面积。
在 main() 函数中,定义了三个 Point 类型的对象 p1、p2 和 p3,分别表示三个坐标点 (0, 0)、(3, 4) 和 (6, 0)。接着,分别调用了它们的成员函数,输出了它们的坐标、它们之间的距离以及三角形的面积。
相关问题
c++编程代码差错:#include <iostream>#include <cmath>using namespace std;class Point {public: Point(double x, double y) : x(x), y(y) {} virtual ~Point() {} double getX() const { return x; } double getY() const { return y; }private: double x; double y;};class Circle : public Point {public: Circle(double x, double y, double radius) : Point(x, y), radius(radius) {} virtual ~Circle() {} double getRadius() const { return radius; } double getArea() const { return M_PI * radius * radius; }private: double radius;};int main() { Circle c(1.0, 2.0, 3.0); cout << "Circle with center (" << c.getX() << ", " << c.getY() << ") and radius " << c.getRadius() << endl; cout << "Area: " << c.getArea() << endl; return 0;}
这段代码存在一个错误,即 Circle 类继承了 Point 类,但是我们知道 Circle 不应该是 Point 的子类,因为 Circle 拥有的属性和方法 Point 并没有。正确的做法是使用组合,即在 Circle 类中包含一个 Point 类型的对象。
以下是修改后的代码:
```
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point(double x, double y) : x(x), y(y) {}
virtual ~Point() {}
double getX() const { return x; }
double getY() const { return y; }
private:
double x;
double y;
};
class Circle {
public:
Circle(double x, double y, double radius) : center(x, y), radius(radius) {}
virtual ~Circle() {}
double getRadius() const { return radius; }
double getArea() const { return M_PI * radius * radius; }
Point getCenter() const { return center; }
private:
Point center;
double radius;
};
int main() {
Circle c(1.0, 2.0, 3.0);
cout << "Circle with center (" << c.getCenter().getX() << ", " << c.getCenter().getY() << ") and radius " << c.getRadius() << endl;
cout << "Area: " << c.getArea() << endl;
return 0;
}
```
修改后的代码使用了组合,Circle 类包含了一个 Point 对象 center,这样 Circle 就拥有了自己的属性和方法。在 main 函数中,我们可以通过调用 getCenter 函数来获取 Circle 对象的中心坐标。
请阅读下面的程序,请在空白处填写正确的代码,以求算两点之间的距离。 #include <iostream> using namespace std; class Point { public: Point(double a, double b){ x = a, y = b; } friend double dist(Point& d1, Point& d2); //友元函数 private: double x, y; }; double dist(Point& d1, Point& d2) { double s; double dx = d1.x - d2.x; double dy = d1.y - d2.y; ; return s; } int main( ) { Point p1(1.0, 2.0), p2(4.0, 6.0); double d; ; cout << "p1, p2 distance = " << d << endl; return 1; }
下面是空白处的正确代码:
```
s = sqrt(dx * dx + dy * dy);
```
将其添加到 `dist()` 函数中即可。`sqrt()` 函数需要 `#include <cmath>` 库。同时在 `main()` 函数中要调用 `dist()` 函数并将其返回值赋给变量 `d`:
```
d = dist(p1, p2);
```
完整代码如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point(double a, double b) {
x = a, y = b;
}
friend double dist(Point& d1, Point& d2);
private:
double x, y;
};
double dist(Point& d1, Point& d2) {
double s;
double dx = d1.x - d2.x;
double dy = d1.y - d2.y;
s = sqrt(dx * dx + dy * dy);
return s;
}
int main() {
Point p1(1.0, 2.0), p2(4.0, 6.0);
double d;
d = dist(p1, p2);
cout << "p1, p2 distance = " << d << endl;
return 1;
}
```
输出结果为:
```
p1, p2 distance = 5
```