29
2019
12

c++友元(friend)函数

友元函数要点


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

当类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类中的私有成员函数。但是这样也破坏了类的封装性。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。