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

你可能感兴趣的:(C++)