标题:友元 有点迷惘?
只看楼主
小鱼漂流
该用户已被删除
已结贴  问题点数:20 回复次数:6 
友元 有点迷惘?
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: class 怎样 include public friend 
2010-10-30 19:39
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:20 
程序代码:
#include<iostream>
using namespace std;
class CLine;
class CPoint   //一条直线的一个点
{
    friend void GetInterPoint(CLine &line);     //友元函数   这语句编译不过,我也不知道为什么,前面我已先定义了 class CLine
      
public:
    CPoint(int x1=0,int y1=0)
    {
      x=x1;
      y=y1;
    }
public:
    int x,y;
  
};


class CLine
{

public:
    void GetInterPoint(CLine &line);
    void Print()                             //输出直线方程
    {
       a=(float)(pt2.y-pt1.y)/(pt2.x-pt1.x);
       b=pt1.y-a*pt1.x;
       cout<<"y="<<a<<"x+"<<b<<endl;
    }
    CLine(CPoint&a,CPoint&b)
    {
      pt1.x=a.x,pt1.y=a.y;
      pt2.x=b.x,pt2.y=b.y;   
    }


private:
    CPoint pt1,pt2;
    float a,b,m,n;

};

void CLine::GetInterPoint(CLine &line)             //求两直线的交点(x,y)
{
  m=(line.b-(*this).b)/((*this).a-line.a);
    cout<<"x="<<m<<endl;
  n=(line.a)*(line.b-(*this).b)/((*this).a-line.a)+line.b;
  cout<<"y="<<n<<endl;

}

int main()
{
  CPoint l1(2,3);
  CPoint l2(5,6);
  CPoint l3(1,1);
  CPoint l4(4,7);
  CLine line1(l1,l2);
  line1.Print();
  CLine line2(l3,l4);
  line2.Print();
  line1.GetInterPoint(line2);   //说是非法调用
  return 0;

}

If You Want Something, Go Get It, Period.
2010-10-30 20:34
小鱼漂流
该用户已被删除
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-31 21:26
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:0 
作用域运算" ::" ,一般用作指明在外的类的成员函数 所属的类!!

If You Want Something, Go Get It, Period.
2010-10-31 21:59
小鱼漂流
该用户已被删除
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-31 22:10
weiqiang
Rank: 2
等 级:论坛游民
帖 子:48
专家分:52
注 册:2010-10-18
得分:0 
学习来的
2010-11-03 20:34
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
你第二个例子里,Cpoint 先定义的,里面的细节全知道。后面就可以用。
但你自己的例子里,只声明了 CLine 是个类,编译器并不知道里面有什么函数。你引用的东西的类型,是编译器暂未知的,所以提示是未定义。
二楼的例子里只是声明了一个普通函数就可以,虽然那个函数的参数用了个未知类型,但向前声明过了(就是最开始的那个 class CLine),所以是合法的。是因为成员函数和普通函数有本质区别,所以語法也有区别。

C++ 語法太混乱,所以要避免复杂。有的时候即使代码编译器认识,人也不认识,或者很难读。如果可以不用,就避免掉。
2010-11-03 21:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-324489-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.351739 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved