c++(友元函数)

友元函数要点

  • 友元函数不是类的成员函数,但是仍可以访问该类的私有成员。友元函数可以是一个外部函数,也可以是另一个类的成员函数。

  • 当类A中的某个函数成员需要访问类B中的私有成员的时候,首先需要在类A的头文件中进行对类B的超前使用说明,这是必不可少的。其次需要在类B中将A的函数声明为友元函数。

  • 友元函数的声明就是在函数原型前面加上friend。

  • 可以将一个类定义为另一个类的友元,但是这样的话,友元类中的所有函数成员都能访问另一个的类中的私有数据成员,这样是不安全的。最好的方法就是哪个需要访问,就设置为友元函数即可。

示例

//为了让aux类能够访问,需要超前声明budget类
class Budget;

class Aux
{
private:
    float auxBudget;

public:
    Aux(){auxBudget = 0;}

    float getAuxBudget(){return auxBudget;}

    //该函数将访问budget类中的私有数据成员,第二个参数是budget类的一个引用
    void addBudget(float,Budget &);
};

在budget类的public属性下的成员函数声明增加下面一句,将aux类中的addbudget函数声明为本类的友元函数。

    //声明为友元函数
    //其实就是告诉编译器,该函数可以访问本类中的私有数据成员
    friend void Aux::addBudget(float,Budget &);

源文件中函数实现

//aux类中的函数成员访问budget类中的私有数据成员
void Aux::addBudget(float b,Budget &bud)
{
    auxBudget+=b;
    bud.allBudget+=auxBudget;
}

这样就可以在主函数中通过aux类的成员函数访问并修改budget类中的私有成员函数。但是这样也破坏了类的封装性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值