友元函数与友元类

友元函数:
           通常一个成员函数只可对它所在类的数据成员进行访问,如果要同时访问多个类的数据成员(包括私有成员),可在这些类中都声明一个友员函数。友员函数的声明是使用关键字"friend"作为开头,具体的位置不受private|protected|public访问控制影响,友员函数的定义和调用,不需要用"类名::"做前缀,因为友员函数是独立于各个类的。
测试代码(1)
#include<iostream>
using namespace std;
class B;//先声明,check函数用到此类
class A
{
 bool bfinish;
 friend bool check(A a, B b);//声明check为类A的友元函数
public:
  A(bool b){bfinish = b;}


};
class B
{
    bool bfinish;
 friend bool check(A a, B b);//声明check为类B的友元函数
    B(bool b){bfinish = b;}


};

bool check(A a, B b){ //定义
 if(a.bfinish&&b.bfinish) return true;
 else return false;

}

int main(int argc, char* argv[])
{

 A a(true);
 B b(false);
 if(check(a,b)) cout<<"bfinish¶¼ÊÇtrue"<<endl;
 else cout<<"bfinish²»¶¼ÊÇtrue"<<endl;
 return 0;
}

测试代码(2)
      代码运行有错,也操作符重载有关。

友元类:
        友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。       
      当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:
      friend class 类名;
      其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。
      使用友元类时注意:
       (1)
友元关系不能被继承。 
       (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
       (3) 友元关系不具有传递性。若类
B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值