zoukankan      html  css  js  c++  java
  • 友元函数的用途

    原文链接: http://blog.chinaunix.net/uid-20665441-id-305468.html

    友元提供了不同类或对象的成员函数之间、类的成员函数于一般函数之间进行数据共享的机制。通过友元,一个普通函数或者类的成员函数可以访问到封装于某一类中的数据,友元函数可以通过对象名访问类的私有和保护成员。

    1. 友元函数

    #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” < 


    2. 友元成员函数
    eg. friend void A::display()

    3.友元类

    class   B 

          ... 
        friend   class   A;//声明A为B的友元类 

          .... 
    }; 
    若A为B的友元类,那么A类的所有成员函数都是B的友元函数,都可以访问B的私有和保护成员

    使用友元类时注意:
    (1) 友元关系不能被继承。 
    (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
    (3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4685265.html
Copyright © 2011-2022 走看看