首页 > 编程语言 > 详细

C++之友元

时间:2019-02-21 22:14:41      阅读:218      评论:0      收藏:0      [点我收藏+]

  

  类可以允许其他类或者函数访问他的非公有成员,方法是令其他类或者函数成为他的友元(friend)。

友元的声明:

  友元声明只能出现在类的内部,但是在类内出现的具体位置不限;由于友元不是类的成员,所以不受所在区域访问控制级别的约束。

  友元的声明并非传统意义上的声明,所以为了能够正确的调用该友元函数,还须在类的外面独立声明该函数。

令函数作为友元:

  如果想要让一个外部函数add使用类A的非公有成员,可以让函数add做类A的友元函数,例如:

  

class A{

    friend void add();

    //类A的剩余部分;

  }

 

  注:因为add()函数是类A的友元函数,所以可以在add()函数的定义中使用类A的非公有成员,但是必须是先定义类A,包括对于add的友元声明;然后再定义add函数,此时它才能使用类A的成员。

令类作为友元:

  如果想要让类B使用类A的非公有成员,可以让类B做类A的友元类,例如:

  

class A{

    friend class B;

    //类A的剩余部分;

  }

 

注:友元关系不存在传递性,例:类B是类A的友元类,函数C是类B的友元函数,但是函数C并不能访问类A的非共有成员。

缺点:这会导致类B中的每个成员函数(包括稍后添加的函数)都可以访问类A的私有成员,所以,最好只把需要访问类A私有成员的成员函数声明为友元。

令成员函数作为友元:

  为了解决类作为友元的缺陷,我们可以让特定的类成员函数作为友元,例如:

  

class A{

    friend void B::add();

    //类A的剩余部分;

  }

 

  注:在把成员函数作为友元时需要注意类A、类B、成员函数add的声明以及定义顺序。

函数重载:

  由于重载函数仍然是不同的函数,因此,如果想要把一组重载函数都声明成友元,则需要对这组函数中的每一个分别声明,例如:

  

void add();

  int add();

  class A{

    friend void add();

    //类A的剩余部分;

  }

 

  只有返回值为void的add函数能使用类A的非公有成员。

C++之友元

原文:https://www.cnblogs.com/silly-truman/p/10403637.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!