クラス内で定義されたフレンド関数にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-05 15:45:02
オリジナル
739 人が閲覧しました

How to Access Friend Functions Defined Within a Class?

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

フレンド関数を使用する場合、その定義とアクセス方法を理解することが重要です。フレンド関数はクラスのメンバーではないため、クラス外でフレンド関数にアクセスするには特別な考慮が必要になる場合があります。

提供されたコード スニペット内:

<code class="cpp">class A {

public:
    friend void fun(A a){std::cout << "Im here" << std::endl;}
    friend void fun2(){ std::cout << "Im here2" << std::endl; }
    friend void fun3();
};</code>
ログイン後にコピー

フレンド関数 fun() と fun3( ) はクラス内で定義されていますが、グローバル スコープでは宣言されていません。 fun() は、型 A の引数のため、引数依存ルックアップ (ADL) を使用して直接アクセスできますが、fun2() には、グローバル スコープでの宣言がなければアクセスできません。

fun2() に正しくアクセスするには、クラス内でフレンド関数として定義するだけでなく、グローバルに宣言する必要があります:

<code class="cpp">class A {

public:
    friend void fun(A a){std::cout << "Im here" << std::endl;}
    friend void fun2();
    friend void fun3();
};

void fun2(){ std::cout << "Im here2" << std::endl; }</code>
ログイン後にコピー

この修正バージョンでは、fun2() はクラスの外で通常の関数としてアクセスできます。

ただし、通常の方法でフレンド関数を定義し、クラスの外でフレンドとして宣言することをお勧めします。

<code class="cpp">class A {
   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();</code>
ログイン後にコピー

このアプローチにより、すべてのフレンド関数が正しく定義および宣言され、アクセス可能になり、意図したとおりに使用できます。

以上がクラス内で定義されたフレンド関数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!