C++ のフレンド関数と例を使用したユース ケース

公開: 2022-10-22

データ隠蔽は、オブジェクト指向プログラミング言語 (OOP) で広く使用されている基本的なソフトウェア開発手法です。 クラス外からのプライベート データ メンバーへのアクセスを制限します。 ただし、フレンド関数として知られる C++ の機能は、データ隠蔽の原則に反します。

この記事では、C++ のフレンド関数とは何か、フレンド クラスとは何かを学び、例を使用していくつかのユース ケースを探ります。

無料のテクノロジー コースをチェックして、競争で優位に立ちましょう。

目次

C++ のフレンド関数とは何ですか?

C++ のフレンド関数は、クラスの外部で宣言された関数ですが、クラスのプライベートおよび保護されたメンバーにアクセスできます。 特定のクラスのプライベート メンバーは非メンバー関数からアクセスできませんが、それらをフレンド関数として宣言すると、クラスのプライベート メンバーおよび保護されたメンバーにアクセスできるようになります。

DevOps における upGrad の Advanced Certification を確認してください

フレンド機能の特徴

C++ のフレンド関数には、次の特徴があります。

  • フレンド関数は、フレンドとして宣言されたクラスのスコープ外です
  • フレンド関数は、クラスのメンバーまたはクラスのスコープ外で宣言された関数のいずれかです。
  • フレンド機能は単一のクラスに限定されません。

人気のソフトウェア エンジニアリング コースを探す

LJMU & IIITB のコンピューター サイエンスの理学修士号 カリフォルニア工科大学 CTME サイバーセキュリティ証明書プログラム
フルスタック開発ブートキャンプ ブロックチェーンのPGプログラム
フルスタック開発のエグゼクティブ PG プログラム
以下のすべてのコースを表示
ソフトウェア工学コース

  • フレンド関数の呼び出しは、オブジェクトを使用せずにクラスの通常の関数を呼び出すようなものです
  • クラスのスコープ内にないため、オブジェクトを使用してフレンド関数を呼び出すことはできません
  • C++ のフレンド関数は引数としてオブジェクトを持ちます
  • プライベートまたはパブリック部分でフレンド関数を宣言できます
  • メンバー名はフレンド関数から直接アクセスできず、ドット メンバーシップ演算子とオブジェクト名をメンバー名と共に使用する必要があります。

upGrad のサイバー セキュリティに関する Advanced Certification を確認してください

フレンド関数の構文

フレンド関数を宣言するには、クラスの本体内でフレンド キーワードを使用します。 フレンド関数の構文は次のとおりです。

クラスクラス名{

… .. …

フレンド returnType functionName(引数リスト);

… .. …

}

需要の高いソフトウェア開発スキル

JavaScriptコース コア Java コース データ構造コース
Node.js コース SQLコース フルスタック開発コース
NFTコース DevOps コース ビッグデータコース
React.js コース サイバーセキュリティコース クラウドコンピューティングコース
データベース設計コース パイソンコース 暗号通貨コース

構文を分解すると、各用語の意味は次のとおりです。

  • friendは、関数がフレンド関数であることを示すキーワードです。
  • returnTypeは関数の戻り値の型です
  • functionNameは、クラスのフレンドになった関数の名前です
  • arg listは渡す引数です

世界トップクラスの大学が提供するソフトウェア開発コースをオンラインで学びましょう。 エグゼクティブ PG プログラム、上級認定プログラム、または修士プログラムを取得して、キャリアを加速させましょう。

C++ フレンド関数の例

それでは、フレンド機能を説明するためにいくつかのプログラムを見てみましょう。

例 1: ボックスの高さを出力する C++ フレンド関数

#include <iostream>

名前空間 std を使用します。

クラスボックス

{

プライベート:

整数の高さ;

公衆:

ボックス (): 高さ (0) { }

フレンド int printHeight(Box); //フレンド機能

};

int printHeight(ボックス h)

{

h.height += 40;

h.height を返します。

}

int main()

{

ボックス h;

cout<<"ボックスの高さ:"<< printHeight(h)<<endl;

0 を返します。

}

ソフトウェア開発に関連する人気記事を読む

Java でデータ抽象化を実装するには? Javaの内部クラスとは何ですか? Java 識別子: 定義、構文、および例
例を使用して OOPS のカプセル化を理解する C のコマンド ライン引数の説明 2022 年のクラウド コンピューティングの機能と特性トップ 10
Java のポリモーフィズム: 概念、型、特徴、および例 Java のパッケージとその使用方法 初心者向け Git チュートリアル: Git をゼロから学ぶ

出力:

ボックスの高さ:40

例 2: C++ のフレンド関数が 2 つのクラスに友好的である場合

#include <iostream>

名前空間 std を使用します。

// 前方宣言

クラス ClassQ;

クラス ClassP {

公衆:

// numP を 12 に初期化するコンストラクタ

ClassP() : numP(12) {}

プライベート:

int numP;

// フレンド関数宣言

フレンド int add(ClassP, ClassQ);

};

クラスクラスQ {

公衆:

// numQ を 1 に初期化するコンストラクタ

ClassQ() : numQ(1) {}

プライベート:

int numQ;

// フレンド関数宣言

フレンド int add(ClassP, ClassQ);

};

// 両方のクラスのメンバーにアクセス

int add(ClassP objectP, ClassQ objectQ) {

return (objectP.numP + objectQ.numQ);

}

int main() {

ClassP objectP;

ClassQ objectQ;

cout << “Sum: ” << add(objectP, objectQ);

0 を返します。

}

出力:

合計:13

上記の例では、クラス P とクラス Q はadd()をフレンド関数として宣言し、両方のクラスのプライベート データへのアクセスを許可しています。 また、クラス P 内のフレンド関数はクラス Q を使用しています。

そこで、プログラム内でクラス Q の前方宣言を行います。

フレンド機能の実装

C++のフレンド関数をよりよく理解するために、フレンド関数を実装する 2 つの方法を見ていきます。

  1. 別のクラスのメソッドを介して C++ でフレンド関数を実装する

フレンドとして宣言されている別のクラスのプライベートおよびプロテクト メンバーにアクセスする必要がある場合、C++ でフレンド クラスを宣言します。 別のクラスの単一のメンバー関数をフレンドとして宣言することもできます。

クラス class_name

{

フレンド クラス friend_class;// フレンド クラスの宣言

};

クラスの友達_クラス

{

};

上記のフレンド クラスの宣言では、 friend_class内のすべての関数がclass_nameのフレンド関数です

別のクラスのメソッドを介したフレンド関数の実装を示す簡単な例を次に示します。

#include <iostream>

名前空間 std を使用します。

クラスA

{

int p=4;

友人クラス B; //フレンドクラス

};

クラスB

{

公衆:

ボイド表示 (A &a)

{

cout<<”p の値は次のとおりです。” <<ap;

}

};

int メイン ()

{

ああ;

B b;

  1. ディスプレイ (a);

0 を返します。

}

出力:

p の値:4

  1. グローバル関数の実装

グローバル フレンド関数を実装すると、グローバル クラス宣言の保護されたプライベート メンバーすべてにアクセスできます。 次に例を示します。

#include<iostream>

名前空間 std を使用します。

クラススペース

{

int a;

int b;

int c;

公衆:

void setdata (int x、int y、int z);

ボイドディスプレイ(ボイド);

フレンド void operator- (スペース &s);

};

void space ::setdata (int x, int y, int z)

{

a=x; b=y; c=z;

}

空きスペース::display(void)

{

cout<<a<<" "<<b<<" "<<c<<"\n";

}

void operator- (スペース & )

{

さ=-さ;

sb =- sb;

sc =- sc;

}

int メイン ()

{

スペース;

  1. setdata (9,2,3);

cout<<「s:」;

  1. 画面 ();

-s;

cout<<「-s:」;

  1. 画面 ();

0 を返します。

}

出力:

秒: 9 2 3

-s: -9 -2 -3

上記のプログラム例では、 operator-は、クラスのスコープでグローバルに宣言したフレンド関数です。

C++のフレンドクラスとは?

今ではかなり明白ですが、フレンド クラスは、フレンドとして宣言されているクラスのプライベート メンバーと保護されたメンバーの両方にアクセスできるクラスです。

簡単に言えば、C++ のフレンド クラスは、あるクラスが別のクラスのプライベート メンバーおよび保護されたメンバーにアクセスできるようにする場合に使用されます。

別のクラスのフレンドとして宣言するクラスのメンバー関数は、フレンド クラスのフレンド関数です。 したがって、フレンド関数は両方のクラスをリンクします。

Friend クラスの構文

C++ でのフレンド クラスの構文は次のとおりです。

クラスR; //前方宣言

クラスP{

// その他の宣言

フレンドクラス R;

};

クラスR{

// 宣言

};

上の図では、クラス R はクラス P のフレンドです。その結果、クラス R はクラス P のプライベート データ メンバーにアクセスできます。ただし、その逆は成り立たず、クラス P はクラス R のプライベート データ メンバーにアクセスできません。 .

また、前方宣言は、エンティティーがカテゴリー的に定義される前に、エンティティーの存在をコンパイラーに通知するために与えられます。 ここでは、前方宣言を使用してクラス R を宣言し、その存在をコンパイラに通知します。 前方宣言により、クラス R のオブジェクトをクラス P で使用できます。

C++ でのフレンド関数の使用は何ですか?

議論を要約して、C++ でのフレンド関数の 2 つの主な用途を見てみましょう。

  • まず、クラスのプライベート メンバーと保護されたメンバーにアクセスする場合は、friend 関数を使用します。 これを行うには、通常、そのクラスのオブジェクトがプライベートおよび保護されたメンバーにアクセスする必要があります。 ただし、フレンド関数を使用すると、アクセスするために関数がクラス メンバーである必要がある状況が解消されます。
  • C++ でのフレンド関数の別の用途は、演算子のオーバーロードです。 名前は同じでも数値と引数が異なる関数は、オーバーロード関数と呼ばれます。 C++ のフレンド関数は、演算子のオーバーロードで使用されます。

この場合、演算子オーバーロード関数は、friend キーワードの前にあり、関数クラス スコープを宣言します。 フレンド関数によってオーバーロードされると、二項演算子は 2 つの明示的な引数を取り、単項演算子は 1 つの引数を取ります。 フレンド演算子関数の実装がクラスのスコープ外で行われることを除いて、二項演算子関数と同じように機能します。

これで、C++ のフレンド関数とその使用に関する議論は終わりですこれが C++ の知識を深めるのに役立つことを願っています。

また、フルスタック開発者としてのキャリアをスタートさせたい場合、 upGradは、IIIT バンガロールと協力して、ソフトウェア開発の完全にオンラインのエグゼクティブ ポストグラデュエート プログラム – フルスタック開発の専門化を 13 か月間提供しています。

プログラムのハイライト:

  • 業界関連のケーススタディと課題への実践的な露出
  • 450 時間以上の 360 度学習
  • 10 以上のトップ プログラミング ツールと言語
  • 1 対 1 のキャリア メンターシップ 業界のメンターとのセッション
  • 年中無休の学生サポート

すぐサインアップして、upGrad の限定特典を今すぐ手に入れましょう!

C++ のフレンド関数とは何ですか?

C++ のフレンド関数は、クラスのメンバーではないが、そのプライベート メンバーと保護されたメンバーにアクセスできる関数です。

フレンド関数をどのように宣言しますか?

フレンド関数は、クラスのプライベートおよび保護されたデータにアクセスできます。 フレンド関数を宣言するには、クラスの本体内でフレンド キーワードを使用します。

C++ でクラス フレンドを作成するにはどうすればよいですか?

C++ でクラスをフレンド クラスとして宣言するには、friend キーワードを使用します。 このキーワードを使用すると、どのクラスでも、他のクラスや関数のプライベートおよび保護されたメンバーにアクセスできます。