c++友元成员函数

如果一个类中的一个成员函数想去访问另一个类的私有成员,需要使用友元成员函数,这两个类是各自有自己的头文件和cpp文件,怎么才能实现友元成员函数呢?友元函数和友元类都可以做到,不知道友元成员函数该怎么写,需要注意的细节是什么?

阅读 3.8k
2 个回答

我就不啰嗦了,贴代码

#include <iostream>
using namespace std;
class A;
class B{
  public:
  void show(const A& a)const;
};

class A{
  void show()const{cout<<"A show"<<endl;}
  friend void B::show(const A& a)const;
};

void B::show(const A& a)const
{
  a.show();
}



int main()
{
  A a;
    B b;
  b.show(a);
   return 0;
}

通常来说,类中的私有成员,只有被类里的成员函数访问,在类外是不能访问的,但类外有些情况下需要访问,就显得很困难,这时候就需要友元函数。其命名为friend。
这里,举一个例子(两点之间线段最短)

#include<iostream>
#include<math.h>
using namespace std;
class Point
{
    private:
        double x;
        double y;
    public:
        Point(double a,double b)
        {
            x = a;
            y = b;
        }
        int GetPoint()
        {
            cout<<"("<<x<<","<<y<<")";
            return 0;
        }
        friend double Distance(Point &a,Point &b);
};
//求两点之间的距离
double Distance(Point &a,Point &b)
{
    double xx;
    double yy;
    xx = a.x-b.x;
    yy = a.y-b.y;
  
    return sqrt(xx*xx+yy*yy);
}
int main()
{
    Point A(2.0,3.0);
    Point B(1.0,2.0);
    double dis;
    dis = Distance(A,B);
    cout<<dis<<endl;
    return 0;
}

最后,提醒一句的是,友元并不属于这个类本身,无论是友元函数还是友元类。都不能使用类内的this指针,同时也不可以被继承
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题