訪問類別中定義的友元函數
在C 中,友元函數被授予訪問類別的私有和受保護成員的權限。提供的程式碼定義了一個具有三個友元函數的類別 A:fun、fun2 和 fun3。雖然 fun 和 fun3 可以毫無問題地訪問,但訪問 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中文網其他相關文章!