回 帖 发 新 帖 刷新版面

主题:各位大虾帮忙看一下代码为什么里面这个实现不了!!!!求助

#include <iostream.h>
class Line
{
public:
    Line(float a=0,float b=0)
    {
        xishua=a;
        xishub=b;
    }
    void print()
    {
        cout<<"y="<<xishua<<"x+"<<xishub<<endl;
    }
    friend float setPoint(Line &,Line &);
    void Point(float x,float y)
    {
        heng=x;
        zong=y;
        cout<<"x="<<heng<<endl;
        cout<<"y="<<zong<<endl;
    }
private:
    float xishua;
    float xishub;
    float heng;
    float zong;
};
float setPoint(Line &l1,Line &l2)//求两直线的交点
{
    float x,y;
    x=(l2.xishub-l1.xishub)/(l1.xishua-l2.xishub);
    y=l1.xishua*x+l1.xishub;
    return (x,y);

}
void main()
{
    Line l1(2,1);
    Line l2(3,2);
    setPoint(l1,l2);

    l1.print();
    l2.print();
}
各位大虾
问题请教啊,
我是想通过那个友元函数求出两条直线的交点,然后将交点的值放到之前定义的那个void Point(float x,float y)这个函数中,然后输出这个点的坐标,可是我这样写的代码为什么都不能实现啊,我不是很清楚要怎样才能将求交点的函数中求出来的值送到那个void Point(float x,float y)函数中......
求助求助!!!!
万分感谢!!!!

回复列表 (共4个回复)

沙发

你在main函数里调用了SetPoint(), 在SetPoint()中求出了交点坐标(如果你用的公式没错的话), 并把保存在局部变量x, y中,是这样吗?
可是, 首先, 你的setPoint()返回的是一个float型的值, 你怎么把一个点的坐标返回去, 这一点我没看懂.
其次, 你在主函数中无视setPoint()的返回值, 这里我也不明白你的意思.

一种解决方法是把你的setPoint()改成这样
float setPoint(Line &l1,Line &l2)//求两直线的交点
{
    float x,y;
    x=(l2.xishub-l1.xishub)/(l1.xishua-l2.xishub);
    y=l1.xishua*x+l1.xishub;

    l1.Point(x, y);//也就加了这一句

    return (x,y); //我不明白这个语句的意思是什么

}
我没有测试过, 你自己试试吧

板凳

float setPoint(Line &l1,Line &l2)//求两直线的交点
既然是求交点,函数的返回类型就不应该是一个float。

修改:
1、float heng; float zong; void Point(float x,float y); 这些可以去掉。因为两条直线的交点并不是任何一条直线的成员。
2、定义一个class Point(方法与class Line类似)
3、在setPoint这个函数返回类型修改为Point,且最后一句改为return Point(x, y);
4、主函数中,写为Point p = setPoint(l1, l2); p.print();

如果想偷懒,其实Point和Line可以混用,因为反正都是保存两个float值。把Line改名叫做Vec2,表示“二维向量”。然后:
1、float heng; float zong; void Point(float x,float y); 这些可以去掉。
2、在setPoint这个函数返回类型修改为Vec2,且最后一句改为return Vec2(x, y);
3、主函数中,写为Vec2 p = setPoint(l1, l2); p.print();

3 楼


先谢谢你啦,可是这样还是调试不出来啊

4 楼


谢谢啦,已经是好了,嘻嘻......

谢谢各位热心的大侠啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册