ホームページ バックエンド開発 C++ C のフレンド宣言はどのようにしてクラス メンバーへのアクセスを制御できますか?

C のフレンド宣言はどのようにしてクラス メンバーへのアクセスを制御できますか?

Dec 20, 2024 pm 03:16 PM

How Can Friend Declarations in C   Control Access to Class Members?

C のフレンド宣言を理解する

C では、フレンド宣言は、外部クラスにクラス メンバーへのアクセスを許可することで、クラス メンバーへのアクセスを制御する方法を提供します。それ以外の場合は保護されている、またはプライベートなデータと機能。

利点と使用法ケース

フレンド宣言は、次の場合に役立ちます。

  • 別のクラスからアクセスする必要があるプライベート データまたは機能を持つクラスがある。
  • 「<<」のような演算子をオーバーロードしたいとします。そして「>>」

カプセル化違反の回避

フレンド宣言を使用すると、カプセル化が許可されるだけなので、必ずしもカプセル化が解除されるわけではありません。同じ名前空間内で定義された特定の外部クラスへのアクセス。カプセル化を減らすことができますが、必要に応じてプライベート データの共有を制御できます。

例: オーバーロードされたオペレーターのフレンド アクセス

次のシナリオを考えてみましょう。 「Point」という名前のクラスのカスタム ストリーム挿入および抽出演算子を作成します。これを実現するには、フレンド宣言を使用できます。

class Point
{
    int x, y;
    friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Point&amp; point);
    friend istream&amp; operator&gt;&gt;(istream&amp; in, Point&amp; point);
};

ostream&amp; operator&lt;&lt;(ostream&amp; out, const Point&amp; point)
{
    out &lt;&lt; &quot;(&quot; &lt;&lt; point.x &lt;&lt; &quot;, &quot; &lt;&lt; point.y &lt;&lt; &quot;)&quot;;
    return out;
}

istream&amp; operator&gt;&gt;(istream&amp; in, Point&amp; point)
{
    in &gt;&gt; point.x &gt;&gt; point.y;
    return in;
}
ログイン後にコピー

このアプローチでは、標準の "<<" を使用して Point オブジェクトを入力および出力できます。そして「>>」

フレンド宣言の使用に関するガイドライン

  • フレンド宣言は必要な場合にのみ使用してください。
  • 制限フレンドとして宣言されたクラスの数。
  • 可能性を回避するには、同じ名前空間内でフレンド宣言を使用してください。
  • フレンド宣言は慎重に使用しないと、簡単に微妙なバグを引き起こす可能性があることに注意してください。

以上がC のフレンド宣言はどのようにしてクラス メンバーへのアクセスを制御できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

c言語関数形式文字ケース変換手順 c言語関数形式文字ケース変換手順 Mar 03, 2025 pm 05:53 PM

c言語関数形式文字ケース変換手順

GULC:Cライブラリはゼロから構築されています GULC:Cライブラリはゼロから構築されています Mar 03, 2025 pm 05:46 PM

GULC:Cライブラリはゼロから構築されています

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? Mar 03, 2025 pm 05:52 PM

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

C標準テンプレートライブラリ(STL)はどのように機能しますか? C標準テンプレートライブラリ(STL)はどのように機能しますか? Mar 12, 2025 pm 04:50 PM

C標準テンプレートライブラリ(STL)はどのように機能しますか?

C言語関数の定義と呼び出しルールは何ですか、そして C言語関数の定義と呼び出しルールは何ですか、そして Mar 03, 2025 pm 05:53 PM

C言語関数の定義と呼び出しルールは何ですか、そして

メモリに保存されているC言語関数の返品値はどこにありますか? メモリに保存されているC言語関数の返品値はどこにありますか? Mar 03, 2025 pm 05:51 PM

メモリに保存されているC言語関数の返品値はどこにありますか?

明確な使用法とフレーズ共有 明確な使用法とフレーズ共有 Mar 03, 2025 pm 05:51 PM

明確な使用法とフレーズ共有

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? Mar 12, 2025 pm 04:52 PM

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?

See all articles