[C++]【类】友元的三种声明及注意事项

类允许其他类或者函数访问它的非公有成员,但我们需要将访问类非公有成员的其他类或者函数成为它的友元。
一、友元函数
  如果类想要把一个函数作为他的友元,只需要增加一条以 friend 关键字开始的函数声明语句即可。
例如:

class A{
    friend void fri_fun(A);
private:
    int a=9;
};
void fri_fun(A aa){
    cout<<aa.a<<endl;
}

  在代码中,我们在类 A 中声明了函数 fri_fun ,并以 friend 关键字加以说明,此时我们可以在函数 fri_fun 中访问 A 类的私有成员。
  友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能过调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行声明。
  一些编译器允许在尚无友元函数的初始声明的情况下就调用它。即使这样,也最好还是提供一个独立的函数声明。
二、友元类
  友元类也需要 friend 关键字加以说明。
例如:

class B{
    friend class A;
    int s=9;
};
class A {
public:
    void aa(B c) {
    cout << c.s << endl;
    }
};


  类 A 的成员函数可以访问类 B 的私有成员。
注意:如果我们把类 A 放在类 B 的前边,此时编译会出错,因为在编译类 A 时,我们并没有定义类 B。
  我们也可以将成员函数作为另一个类的友元,我们将上一个代码更改,仅仅让类 A 的成员函数 aa 可以访问类 B 的私有成员:

class B;
class A{
public:
    void aa(B c);
};
class B{
    friend void A::aa(B);
    int s=9;
};
void A::aa(B c){
     std::cout << c.ss << std::endl;
}

  我们将类 A 的成员函数 aa 作为类 B 的友元函数,这是我们必须在类 B 之前声明函数 aa (我们的代码,在类 A 中已经声明),在类 B 之后定义(如果用到类 B 的成员),在友元声明中我们必须指明该函数属于哪一个类。
  在类 A 中,成员函数 aa 的形参包含 B 类类型元素,所以在类 A 之前,必须有类 B 的前向声明。
 

转载于:https://my.oschina.net/u/920274/blog/3071833

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值