請問這兩個程式碼!!!

一個程式碼是利用friend函數去取private資料

一個程式碼是利用get取private資料

請問既然可以用get函數去取private資料,那friend為何還需要他?

先謝謝各為前輩指點。

1. http://codepad.org/ZR6aBfmD

2. http://codepad.org/KTa8YNZf

3 個解答

評分
  • 9 年前
    最佳解答

    class First

    {

    int x;

    public:

    void setx(int var) {

    x = var;

    }

    friend int getx(First obj){

    return obj.x;

    }

    };實際上等同於下面這段:

    class First

    {

    int x;

    public:

    void setx(int var) {

    x = var;

    }

    friend int getx(First);

    };

    int getx(First obj) {

    return obj.x;

    }

    實際上getx( )是一個普通函式,不是First的成員函式,

    所以getx( )原本沒有權力取First類別的private資料xfriend int getx(First);表示First類別賦與getx函式權力

    2012-04-01 02:37:08 補充:

    不好意思,最後兩句沒換行:

    所以getx( )原本沒有權力取First類別的private資料x,

    friend int getx(First)表示First類別賦與getx函式權力

  • 9 年前

    我懂了!! 感謝帕拉提斯前輩指點。

  • 其威
    Lv 7
    9 年前

    假設你的 class 很大,有幾百個變數...

    1. 如果每個變數都要寫個 get / set 不是很累嗎?(不過這還是次要原因)

    2. 如果是一般 public 成員函式,那麼所有程式都可以使用。例如你有 A B C 三個 class,你希望 B 能夠用 A 的東西、但是 C 不行,這時候就可以用 friend。

還有問題?馬上發問,尋求解答。