C++小程序一个·· 求点到直线距离

2025-06-22 08:48:24
推荐回答(1个)
回答1:

首先是这个函数:tance(int , point);
所有声明要修改为: distance(line, point);
要做到这一点,必须在point类定义之前加上:
class point;
class line;
double distance(line, point);
这三个声明。
然后里面的由原函数声明改为:friend double distance(line, point);

如下:

#include
#include
using namespace std;

class line;
class point;
double distance(line ,point );

class point{
private: int _x; int _y;
public:
point():_x(0),_y(0) {}
point(int x,int y):_x(x),_y(y) {}
friend double distance(line ,point );
};
class line{
private:
int _a; int _b; int _c;
public:
line():_a(0),_b(0),_c(0) {}
line(int a,int b,int c):_a(a),_b(b),_c(c) {}
//line(int a,point pt):_a(a),_b(pt._x),_c(pt._y) {} //就算有这构造函数,由于point内容是私有的,无法成功赋值。
friend double distance(line ,point ); //这边末尾少了一个分号。
};
double distance(line l,point p)
{
return abs((l._a*p._x+l._b*p._y+l._c)/(l._a*l._a+l._b*l._b)); //这里有一个笔误,已修正
}
void main(){
int a,b,c;
cout<<"请输入二次项系数"< cin>>a;
cout<<"请输入一次项系数"< cin>>b;
cout<<"请输入常数项"< cin>>c;
int x,y;
cout<<"请输入点的横坐标X"< cin>>x;
cout<<"请输入点的纵坐标Y"< cin>>y;
point d(x,y);
line e(c,x,y); //这里你无法用point给line初始化,原因见上面的构造函数
double h;
h=distance(e,d);//cout<<"请输入X"<}

编译结果:
--------------------Configuration: XX - Win32 Debug--------------------
Compiling...
XX.cpp
Linking...

XX.exe - 0 error(s), 0 warning(s)