クラスで定義されたフレンド関数へのアクセス
C では、フレンド関数にはクラスのプライベート メンバーと保護されたメンバーへのアクセスが許可されます。提供されたコードは、3 つのフレンド関数 fun、fun2、および fun3 を備えたクラス A を定義します。 fun と fun3 には問題なくアクセスできますが、fun2 へのアクセスには問題があります。
fun2 にアクセスするには、 2 つのオプションがあります:
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 クラスで定義された Friend 関数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。