美文网首页
【C++】C++学习笔记之五:友元

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

作者: Angeladoudou | 来源:发表于2016-10-08 23:45 被阅读0次

    在类中有一种函数声明前加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++学习笔记之五:友元

          本文链接:https://www.haomeiwen.com/subject/fmlpyttx.html