#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 09:25:45 浏览: 212
这段代码定义了一个名为 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> #include<cmath> using namespace std; class Point{ private: float x,y; public: double suan(){ return sqrt(x*x+y*y); } }; int main(){ Point p[5]; double dis[5]; for(int i=0;i<5;i++){ cin>>p[i].x>>p[i].y; dis[i]=p[i].suan(); } for(int i=0;i<5;i++){ for(int j=1;j<5;j++){ if(dis[i]>dis[j]) { swap(dis[i],dis[j]); } } } cout<<"与原点的距离:"<<endl; for(int i=0;i<5;i++) { cout<<dis[i]<<" "; } }
在这段代码中,类 Point 中的私有属性 x 和 y 没有被初始化,导致在调用 suan() 函数时会出现未定义的行为。您可以在类 Point 的构造函数中对 x 和 y 进行初始化,如下所示:
```
class Point{
private:
float x,y;
public:
Point(float x=0, float y=0) : x(x), y(y) {}
double suan(){
return sqrt(x*x+y*y);
}
};
```
这里使用了类的构造函数来初始化 x 和 y,使其在调用 suan() 函数时不会出现未定义的行为。
另外,在排序中,您的代码实现有误。应该是:
```
for(int i=0;i<5;i++){
for(int j=i+1;j<5;j++){
if(dis[i]>dis[j])
swap(dis[i],dis[j]);
}
}
```
这里使用了两个循环来实现排序,而且第二个循环的起始值是 i+1,避免了重复比较。
阅读全文