【C++】C++学习笔记之五:友元

在类中有一种函数声明前加friend关键字的函数声明方式,这种函数被称为C++类的友元函数

1. 友元的作用——破坏封装性

友元函数就像朋友一样,可以自由调用该类的私有成员函数和类的私有数据成员。其一定程度上破坏了类的封装性,建议尽量减少使用友元,但其好处是在某些情况下可以简化代码,优化效率。

class complex{    
private:        
    friend complex& operator+=(complex & l, const complex & r);
};
complex& operator+=(complex& l, const complex & r){ 
    l.re += r.re;   //声明友元后可以自由使用complex类的私有数据成员
    l.im += r.im;  //既简化了代码又可以提高效率
    return l;
}

如果不使用友元运算符+=重载可能要写成如下样子:

complex operator+=( complex& l, const complex & r ){
    double re = l.real() + r.real();   //调用函数,增加压栈操作和开销
    double im = l.imag() + r.imag();
    return complex(re,im); // 增加临时变量的开销,并且返回只能做值传递,增加一次赋值操作
}

2. 相同class的各个object互为友元

这一重要性质可以用如下代码展示:

class complex{
       ……     
public:
        //普通的类中成员函数 
       int function(const complex& param){
               return param.re + param.im;       
       }
};

对其调用如下

{    
    complex c1(2,1);    
    complex c2;     //由于class的各个object互为友元,所以c2可以通过function函数直接使用c1的私有数据成员    
    cout << c2.function(c1) << endl;
}

你可能感兴趣的:(【C++】C++学习笔记之五:友元)