友元函数

来源:互联网 发布:php连接mysql失败 编辑:程序博客网 时间:2024/05/17 06:48
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。 

  友元函数 

  友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。下面举一例子说明友元函数的应用。 

  #include   
  #include   

  class   Point 
  { 
  public: 
    Point(double   xx,   double   yy)   {   x=xx;   y=yy;   } 
    void   Getxy(); 
    friend   double   Distance(Point   &a,   Point   &b); 
  private: 
    double   x,   y; 
  }; 

  void   Point::Getxy() 
  { 
  cout < < "( " < 
  } 

  double   Distance(Point   &a,   Point   &b) 
  { 
  double   dx   =   a.x   -   b.x; 
  double   dy   =   a.y   -   b.y; 
  return   sqrt(dx*dx+dy*dy); 
  } 

  void   main() 
  { 
  Point   p1(3.0,   4.0),   p2(6.0,   8.0); 
  p1.Getxy(); 
  p2.Getxy(); 
  double   d   =   Distance(p1,   p2); 
  cout < < "Distance   is " < 
  } 

  说明:在该程序中的Point类中说明了一个友元函数Distance(),它在说明时前边加friend关键字,标识它不是成员函数,而是友元函数。它的定义方法与普通函数定义一样,而不同于成员函数的定义,因为它不需要指出所属的类。但是,它可以引用类中的私有成员,函数体中a.x,b.x,a.y,b.y都是类的私有成员,它们是通过对象引用的。在调用友元函数时,也是同普通函数的调用一样,不要像成员函数那样调用。本例中,p1.Getxy()和p2.Getxy()这是成员函数的调用,要用对象来表示。而Distance(p1,   p2)是友元函数的调用,它直接调用,不需要对象表示,它的参数是对象。(该程序的功能是已知两点坐标,求出两点的距离。)