跳至主要內容

友元

张威大约 1 分钟c/c++类和对象

友元friend

作用:访问类中的私有成员

友元的形式可以分为友元函数友元类

class 类名 
{
    //...
    friend 函数原型;
    friend class 类名;
    //...
}

形式:

1、友元之普通函数

2、友元之成员函数

3、友元之友元类

友元函数

分为全局函数友元和成员函数友元

float distance(const Point &lhs, const Point &rhs)//全局函数
{
     return hypot(lhs._ix - rhs._ix, lhs._iy - rhs._iy);
}

class Line
{
public:
    float distance(const Point &lhs, const Point &rhs)//成员函数
    {
          return hypot(lhs._ix - rhs._ix, lhs._iy - rhs._iy);
    }
};

class Point
{
public:
    Point(int ix = 0, int iy = 0)
    : _ix(ix)
    , _iy(iy)
    {
        
    }
    
    void print() const
    {
        cout << "(" << _ix
             << "," << _iy
             << ")";
    }
    
    friend float distance(const Point &lhs, const Point &rhs);//全局函数
    friend float Line::distance(const Point &lhs, const Point &rhs);//成员函数
private:
    int _ix;
    int _iy;
};

友元类

多个函数访问类的私有成员,一个个写成友元函数麻烦,可以封装一个友元类

class Point 
{
    //...
    friend class Line;
    //...
};

友元的性质

  1. 友元关系是单向的、没有传递性(A->B->C)、不能被继承

  2. 友元的声明是不受public/protected/private访问关键字限制的。