友元的问题

来源:互联网 发布:python学习手册 编辑:程序博客网 时间:2024/04/25 05:17

今天看了下友元,发现友元其实就和其名一样,如果想让哪个外部函数或者类访问本类中的私有封装数据,就将其设为友元。

由于C++中的封装原则,封装在类内部的私有数据外部函数不能访问,如果要访问就需利用本函数中的公有函数进行访问,但是调用函数需要开销,影响效率,因此如果想在不影响效率的情况下对类中的公有数据进行访问,就需要使用友元了。

程序如下:

#include <stdlib.h>
#include <iostream.h>

class ho_class
{
  friend class gu_class;
  private:
     int a,b;
  public:
     ho_class();
};

class gu_class
{
  public:
    void manage_one(ho_class &m);
    void manage_two(ho_class &n);
};


void gu_class::manage_one(ho_class &mm)
{
  cout <<"the before data is/n";
  cout << mm.a <<"/t" << mm.b <<"/n";
  mm.a=mm.a+1;
  mm.b=mm.b+1;
  cout << mm.a <<"/t" << mm.b <<"/n";
}

void gu_class::manage_two(ho_class &nn)
{
  cout <<"the before data is/n";
  cout << nn.a <<"/t" << nn.b <<"/n";
  nn.a=nn.a+1;
  nn.b=nn.b+1;
  cout << nn.a <<"/t" << nn.b <<"/n";
}

ho_class::ho_class()
{
  a=0;
  b=0;
}

main()
{
  ho_class ho;
  gu_class gu;
  gu.manage_one(ho);
  gu.manage_two(ho);
}

 

需要注意的是,友元并不是本类中的函数,因此在声明友元的时候,不要将友元放在public,private和protected下,另外在定义该友元函数的时候如果是全局函数前面不要有类名。