C++のFriend関数とNormal関数の違いとは?

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


C++のFriend FunctionとNormal Functionの主な違いは、Friend Functionがプライベートなデータや保護されたデータへのアクセスを助けるのに対し、Normal Functionは特定のタスクを実行するステートメントのグループであることです。

C++は、1979年にBjarne Stroustrupによって開発されたプログラミング言語です。

この言語はC言語に似ていますが、C言語よりもさらに多くの機能を備えています。

C++の主要なプログラミングコンセプトの1つは関数です。

C++には、通常の関数とは異なるフレンド関数と呼ばれる特殊な関数があります。

スポンサーリンク

C++のフレンド関数とは

クラスには、privateとprotectedのデータメンバが存在することがあります。

privateデータメンバはクラスの外からアクセスすることはできません。

保護されたデータメンバは、クラス内およびそのサブクラスからアクセスすることができます。

したがって、この2つのアクセス修飾子はデータ・メンバへのアクセスを制限します。

さらに、フレンド関数を使用すると、クラスのプライベートおよびプロテクトされたデータメンバにアクセスすることができます。

friend “キーワードは、ある関数をフレンド関数として宣言するものです。

上のプログラムでは、Calculate クラスに number というプライベートなデータメンバが含まれています。

プログラマは、10行目のようにクラス内部でフレンド関数を宣言する必要があります

 そして、calculateコンストラクタでnumberを0に初期化する。

mainメソッドでは、cはCalculateのオブジェクトです。

そのオブジェクトをprintNumberメソッドに渡せばいいのです。

printNumberはフレンド関数なので、プライベートメンバーである「number」にアクセスし、値を変更することができます。

したがって、その値にアクセスし、20を足して結果を返しています。

最後に、その結果がコンソールに表示されます。

C++の正規関数とは

通常の関数とは、特定のタスクを実行する命令の集合のことです。

すべての命令を1つのメソッドに記述するのではなく、プログラムを複数の関数に分割し、必要に応じてmainメソッドで呼び出すことができます

  したがって、通常の関数はコードの再利用性を高め、コードの保守性を向上させる。

関数には、ライブラリ関数とユーザ定義関数の2種類があります。

C++はライブラリ関数を提供しています。

これらは、C++のヘッダーファイルで宣言されています。

例えば、sin(x)、sqrt(x)などです。

プログラマはこれらをプログラムの中で直接使用することができます。

 さらに、プログラマは自分自身の関数を書くことができます。

これらはユーザ定義関数と呼ばれます。

Main Difference - Friend Function vs Normal Function in C++ 図2: 正規関数を用いたC++プログラム

上のプログラムでは,mainメソッドでxとyは2つの整数値です。

findSumはメソッドであり、xとyの値を渡すことができる。

これは合計を計算し、結果を返します。

結果はsum変数に格納されます。

同様に、findMultiplyという関数があります。

この関数にはxとyの値を渡すことができる。

これは掛け算を計算し、結果を返します。

同様に、これら2つの関数はタスクを実行し、その答えをmainメソッドに返します。

C++のフレンド関数とノーマル関数の違い

定義

C++におけるフレンド関数は、プライベートデータや保護されたデータにアクセスするためのメソッドであり、C++における通常の関数は、プログラムにモジュール性を持たせるためのメソッドです。

これが、C++におけるフレンド関数と通常関数の主な違いです。

使用方法

C++のフレンド関数とノーマル関数のもうひとつの違いは、その使い方です。

フレンド関数は、クラスのプライベートなデータや保護されたデータを変更するのに役立ちますが、通常の関数は、コードの再利用性を向上させ、コードを保守しやすくします。

結論

C++のフレンド関数と通常の関数の主な違いは、フレンド関数はプライベートなデータや保護されたデータにアクセスするのに役立ち、通常の関数は特定のタスクを実行するステートメントのグループであることです。

簡単に言うと、フレンド関数は関数の一種です

タイトルとURLをコピーしました