C++中友元的一些总结


  我不知道关于C++关键字friend的全部议题有多少,我只对我了解的做个小结。

  1,friend申明一个友元

  friend一般为一句申明式,它位于一个类的内部,它申明一个类或者一个函数为该类的友元。friend并不是定义一个成员函数,所以 friend放在public,protected或者private前都可以,完全是一样的。做为一个友元,即表示在该类或者该函数内部可以访问这个类的私有成员,你和朋友之间是不是应该没有什么隐藏的呢。例子:

  class A

  {

  public:

  A(int _a) : a(_a) {}

  friend void test(A&);

  friend class B;

  private:

  int a;

  };

  void test(A& x)

  {

  x.a=100;//拥有私有成员a的访问权限

  }

  class B

  {

  public:

  void foo();

  };

  如果friend申明式为一般的非模板类或者函数,则该处可以为首次申明。对于一个类,只能是申明式,对于函数,可以是它的定义式。

  class A

  {

  public:

  A(int _a) : a(_a) {}

  friend void test(A& x)

  {

  x.a = 100;//定义::test()友元函数

  }

  friend class B;

  private:

  int a;

  };

  注意尽管将函数的定义式放在类内部,但它并不是一个成员函数,对于省略受限的定义形式它将成为一个全局函数::test(),当然你也可以申明另外一个类的成员函数为友元,如:

  class A

  {

  public:

  A(int _a) : a(_a) {}

  friend void B::foo();

  private:

  int a;

  };

  • 1
  • 2
  • 3
  • 下一页

相关内容