设为首页 加入收藏

TOP

c++中友元的一些总结
2014-11-21 23:40:25 】 浏览:7935
Tags:中友 元的 一些 总结

  我不知道关于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;


  };


  总的来说,如果你想在哪里访问类A的私有成员,就在类A内写上一句该处的申明式,并在前面加上friend关键字。


  这是一般情况,很简单,但是它会破坏封装的初衷,所以尽量少用;Effective C++中有一个应用的例子,对一个类定义的二元操作符,如果你希望它能对操作数都进行隐式转化,那么就定义一个全局函数,并申明成该类的友元。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一个有关随机函数rand()的小程序 下一篇列主元消元法求解线性方程组

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目