美文网首页
C++——友元friend,实践

C++——友元friend,实践

作者: StevenHD | 来源:发表于2020-11-29 00:03 被阅读0次

    一、友元的概念

    • 同类之间是不需要友元的
    • 只有不同类之间需要友元

    友元friend可以让类B的对象高效地访问类A的私有成员,如果不用友元friend,那么就需要通过类A的公有成员函数来访问类A的私有数据成员(这种做法太麻烦了)。

    二、前向性声明

    • 前向性声明具有局限性——解决这种A& t问题。

    三、不同类之间的声明

    全局函数和类B的成员函数——


    全局函数可以不加::,但是另一个类要加上B::

    四、实践友元

    • 友元函数的实现需要放在类外
    • 如果一个类中的多个成员函数都需要被声明成友元,那么我们直接将这个类声明为友元类

    声明为类A(比如Point)的友元,就可以通过A(比如Point)的对象,访问A(比如Point)的private数据成员

    五、友元的利弊

    友元的好处在于——可以不用通过函数接口来使用private成员,而是可以直接通过对象来访问。(当然就算是自己类的对象也不能直接访问自己类的private数据成员

    友元一般都是函数,友元类也是对函数有便利,让友元函数直接使用private数据成员,因为本类自己的公有函数是可以随便用Private数据成员的。
    友元的坏处在于——破坏了封装性

    六、运算符重载与友元

    将一个全局函数变为友元函数

    #include <iostream>
    
    using namespace std;
    
    class Complex
    {
    public:
        Complex (int r = 0, int i = 0) : real(r), image(i) {}
        
        friend Complex operator+(Complex& a, Complex& b);
    
        void dis()
        {
            cout << "(" << real << "," << image << ")" << endl;
        }
    
    private:
        
        int real;
        int image;
    };
    
    Complex operator+ (Complex& a, Complex& b)
    {
        Complex t;
    
        t.real = a.real + b.real;
        t.image = a.image + b.image;
    
        return t;
    }
    
    int main()
    {
        Complex c1(1, 2), c2(3, 4);
        Complex c3 = c1 + c2;
        
        c3.dis();
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++——友元friend,实践

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