ホームページ  >  記事  >  バックエンド開発  >  C クラスで定義された Friend 関数にアクセスするにはどうすればよいですか?

C クラスで定義された Friend 関数にアクセスするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-10 08:39:02469ブラウズ

How to Access Friend Functions Defined in a C   Class?

クラスで定義されたフレンド関数へのアクセス

C では、フレンド関数にはクラスのプライベート メンバーと保護されたメンバーへのアクセスが許可されます。提供されたコードは、3 つのフレンド関数 funfun2、および fun3 を備えたクラス A を定義します。 funfun3 には問題なくアクセスできますが、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。