c/c++ 友元基本概念

友元基本概念:

1,把一个一般函数声明为一个类的友元函数

2,把一个类A的某几个成员函数声明为某个类B的友元函数

3,把一个类A声明为一个类B的友元类。

友元的作用:可以访问类B里所有的成员变量和成员方法,不管是public,protected,还是private。

1,把一个一般函数show声明为一个类的友元函数

#include <iostream>
using namespace std;

class Test{
  friend void show(const Test &t);
public:
  Test(int d = 0) : data(d){}
private:
  void fun()const{
    cout << "fun:" << data << endl;
  }
  int data;
};

//友元,即可以访问私有成员变量,也可以访问私有方法                 
void show(const Test &t){
  cout << "friend of Test:" << t.data << endl;
  t.fun();
}

int main(){
  Test t(100);
  show(t);

  return 0;
}

2,把一个类A的fun成员函数声明为类Test的友元函数,但是类A的fun1函数不是类Test的友元函数,所以在fun1里不能够访问Test的私有成员。

#include <iostream>
using namespace std;

class Test;

class A{
 public:
  A(int d = 0) : data(d){}
  void fun(const Test &t);
  void fun1(const Test &t);

 private:
  int data;
};

class Test{
  friend void A::fun(const Test &t);
public:
  Test(int d = 10) : data(d){}
private:
  int data;
};

void A::fun(const Test &t){
  cout << t.data << endl;
}
void A::fun1(const Test &t){
  //编译不能通过,因为fun1不是class Test的友元函数。               
  //cout << t.data <<endl;                                         
}
int main(){
  Test t(100);
  A a;
  a.fun(t);
}

3,把类B声明为一个类Test的友元类,因此,类B的所有public成员函数都是类Test的友元函数。

#include <iostream>
using namespace std;

class Test;

class B{
public:
  void fun1(const Test &t);
  void fun2(const Test &t);
};

class Test{
  friend class B;
public:
  Test(int d = 0) : data(d){}
private:
  void pri()const{
    cout << "pri" << endl;
  }
  int data;
};

void B::fun1(const Test &t){
  cout << t.data << endl;
}
void B::fun2(const Test &t){
  t.pri();
}

int main(){
  Test t(10);
  B b;
  b.fun1(t);
  b.fun2(t);
}
posted @ 2018-08-19 22:23  小石王  阅读(632)  评论(0编辑  收藏  举报