友元類、友元函數

#include <iostream>

#include <vector>

#include <assert.h>


using namespace std;


class A;

class C

{

    public:

        int getA(A a);

};


class A

{

    public:

        int a;

        A() 

        :a(10),b(11) {}

    private:

        int b;

        int getA() {return a;}

    friend class B;

    friend int C::getA(A a);

};


class B

{

    public:

        int getA(A a) {return a.getA();}

        int getB(A a) {return a.b;}

};


int C::getA(A a) {return a.b;}



int main()

{

    A a;

    B b;

    C c;

    cout << b.getA(a) << endl;

    cout << b.getB(a) << endl;

    cout << c.getA(a) << endl;

    return 0;

}


如上爲使用友元類和友元函數的例子。

使用場景:

    1、類之間數據共享

    2、運算符重載

優點:能夠提高效率,表達簡單、清晰;

 缺點:友元函數破環了封裝機制,儘量不使用成員函數,除非不得已的情況下才使用友元函數;

注意點:友元函數不能繼承;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章