C++ 速查手冊

9.8 - friend 成員

private 成員只限同個類別的其他成員存取, C++ 提供另一種方式讓函數或其他類別也可存取 private 成員,就是在類別宣告為 friend 的成員函數,或是宣告為 friend 的類別,舉例如下

#include <iostream>
  
class Demo {
public:
    Demo(int pa, int pb) {
        a = pa;
        b = pb;
    }
    
    friend int do_something(Demo& d) {
        return d.a + d.b;
    }
    
    friend class Demo2;

private:
    int a;
    int b;
};

class Demo2 {
public:
    int do_something2(Demo& d) {
        return d.a + d.b;
    }
};

int main() {
    Demo d(32, 22);
    std::cout << do_something(d) << std::endl;
    Demo2 d2;
    std::cout << d2.do_something2(d) << std::endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://kaiching.org/
   檔名:u0908.cpp
   功能:示範 C++ 的類別
   作者:張凱慶*/

do_something() 為宣告為 friend 的成員函數,注意,這裡以 Demo參考當參數,至於 Demo2 為可存取 Demoprivate 成員的類別

friend int do_something(Demo& d) {
    return d.a + d.b;
}

Demo2do_something2()Demo 的參考當參數,就可以存取 Demoprivate 成員了

int do_something2(Demo& d) {
    return d.a + d.b;
}

friend 成員函數 do_something() 不需要以物件呼叫, Demo2do_something2() 則需要用 Demo2 的物件呼叫

Demo d(32, 22);
std::cout << do_something(d) << std::endl;
Demo2 d2;
std::cout << d2.do_something2(d) << std::endl;

編譯執行,結果如下

$ g++ u0908.cpp
$ ./a.out
54
54
$

相關教學影片

上一頁 9.7 - this 指標
回 C++ 速查手冊首頁
下一頁 9.9 - static 成員
回 C++ 教材
回程式語言教材首頁