类的友元。

C++为了进一步提高数据共享,通过友元机制实现类外数据共享。

友元不是该类的成员函数,但是可以访问该类的私有成员。
对于一个类而言,它的友元是一种定义在该类外部的:
– 普通函数, 或者另一个类的成员函数, 或者另一个类,
但需要在该类体内进行说明。

3.1、友元函数

3.1.1、非成员函数(普通函数) 作为友元函数

将一个函数声明为一个类的友元函数后,它不但可以通过对象名访问类的公有成员,而且可以通过对象名访问类的私有成员和保护成员

访问对象中的成员必须通过对象名

友元函数近似于普通的函数,它不带有this指针, 因此必须将对象名或对象的引用作为友元函数的参数,这样才能访问到对象的成员。

友元函数可以访问该类中的所有成员(公有的、私有的和保护的) ,而一般函数只能访问类中的公有成员

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A{
  5.   float x, y;
  6. public:
  7.   A(float a, float b){x=a; y=b;}
  8.   float GetX(){return x;}
  9.   float GetY(){return y;}
  10.   float Sum(){ return x+y; }      //成员函数
  11.   friend float Sum(A &a);         //友元函数声明
  12. } ;
  13. float Sum(A &a) { return a.x + a.y;    }  //友元函数定义
  14. float SumXY(A &a) //普通函数定义
  15. {
  16.   return a.GetX()+a.GetY(); 
  17. }
  18. int main(){
  19.   A t1(4,5), t2(10,20), t3(100,200);
  20.   cout<<t1.Sum()<<endl; //成员函数的调用,利用对象名调用
  21.   cout<<Sum(t1)<<endl;  //友元函数的调用,直接调用
  22.   cout<<SumXY(t1)<<endl; //调用一般函数
  23.   return 0;
  24. }

3.2、友元类

当一个类作为另一个类的友元时,就意味着这个类的所有成员函数都是另一个类的友元函数

https://i-blog.csdnimg.cn/blog_migrate/af0f3a7369ccd236132801b2ff61cfe2.png

假设有两个无关系的类engine 和fuel,使用时,怎样允许fuel成员访问engine的私有成员和保护的成员

class fuel;
class engine
{
    friend class fuel;
  private;
    int powerlevel;
  public;
    engine(){powerLevel =0;}
    void engine_fn(fuel&f);
    
};
class fuel
{
    friend class engine;
    private;
    int fuelLevel;
    public:
    fuel(){fuelLevel=0;} 
    void fuel_fn(engine &e);
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值