首頁  >  文章  >  後端開發  >  如何存取 C 類中定義的友元函數?

如何存取 C 類中定義的友元函數?

Susan Sarandon
Susan Sarandon原創
2024-11-10 08:39:02469瀏覽

How to Access Friend Functions Defined in a C   Class?

訪問類別中定義的友元函數

在C 中,友元函數被授予訪問類別的私有和受保護成員的權限。提供的程式碼定義了一個具有三個友元函數的類別 Afunfun2fun3。雖然 funfun3 可以毫無問題地訪問,但訪問 fun2 時出現問題。

要存取 fun2,您有兩個選擇:

1。友元函數的全域宣告:

您可以在類別定義之後在全域範圍內宣告友元函數。這通知編譯器一個函數存在於外部並且是該類別的友元。例如:

<code class="cpp">#include <iostream>

class A {
public:
    friend void fun(A a);
    friend void fun2();
    friend void fun3();
};

void fun(A a) { std::cout << "I'm here" << std::endl; }
void fun2() { std::cout << "I'm here2" << std::endl; }
void fun3() {
    std::cout << "I'm here3" << std::endl;
}

int main() {
    fun(A()); // Works
    fun2(); // Now works
    fun3(); // Works
}</code>

2。明確成員函數呼叫:

您可以明確地呼叫友元函數作為類別的成員函數。但是,這需要將友元函數標記為靜態(如果它們沒有 this 參數)。例如:

<code class="cpp">#include <iostream>

class A {
public:
    friend static void fun(A a);
    friend static void fun2();
    friend static void fun3();
};

static void fun(A a) { std::cout << "I'm here" << std::endl; }
static void fun2() { std::cout << "I'm here2" << std::endl; }
static void fun3() {
    std::cout << "I'm here3" << std::endl;
}

int main() {
    fun(A()); // Works
    A::fun2(); // Works
    fun3(); // Works
}</code>

記住,全域範圍內的友元函數的宣告是必要的,無論它是明確存取還是作為靜態成員函數。

以上是如何存取 C 類中定義的友元函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn