C++関数


関数は、タスクを一緒に実行するステートメントのグループです。すべての C++ プログラムには少なくとも 1 つの関数 (メイン関数 main()) があり、すべての単純なプログラムは他の追加関数を定義できます。

コードをさまざまな関数に分割できます。コードをさまざまな関数にどのように分割するかはユーザー次第ですが、論理的には通常、分割は特定のタスクを実行する各関数に基づいて行われます。

関数 declaration は、関数の名前、戻り値の型、パラメーターをコンパイラーに伝えます。関数 定義 は、関数の実際の本体を提供します。

C++ 標準ライブラリには、プログラムから呼び出すことができる多数の組み込み関数が提供されています。たとえば、関数 strcat() は 2 つの文字列を連結するために使用され、関数 memcpy() はメモリを別の場所にコピーするために使用されます。

関数には、メソッド、サブルーチン、プログラムなど、さまざまな名前もあります。

関数を定義する

C++ での関数定義の一般的な形式は次のとおりです:

return_type function_name( parameter list )
{
   body of the function
}

C++ では、関数は関数ヘッダーと関数本体で構成されます。以下に関数のすべてのコンポーネントを示します。

  • 戻り値の型: 関数は値を返すことができます。 return_type は、関数によって返される値のデータ型です。一部の関数は値を返さずに必要な操作を実行します。この場合、return_type はキーワード void です。

  • 関数名: これは関数の実際の名前です。関数名とパラメーター リストが一緒になって関数シグネチャを形成します。

  • パラメータ: パラメータはプレースホルダーのようなものです。関数が呼び出されるときは、実引数と呼ばれる引数に値を渡します。パラメータ リストには、関数パラメータのタイプ、順序、数が含まれます。パラメータはオプションです。つまり、関数にパラメータを含めることはできません。

  • 関数本体: 関数本体には、関数によって実行されるタスクを定義する一連のステートメントが含まれます。

以下はmax()関数のソースコードです。この関数には 2 つのパラメーター (num1 と num2) があり、2 つの数値のうち大きい方を返します:

// 函数返回两个数中较大的那个数
 
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

関数宣言

関数 declaration は、コンパイラーに関数名と関数の呼び出し方法を伝えます。関数の実際の本体は個別に定義できます。

関数宣言には次の部分が含まれます:

return_type function_name( parameter list );

上で定義した関数 max() の場合、関数宣言は次のとおりです:

int max(int num1, int num2);

関数宣言では、パラメーターの名前は重要ではなく、パラメーターの型のみが重要です。パラメータは必須です。 したがって、以下も有効な宣言です:

int max(int, int);

あるソース ファイルで関数を定義し、別のファイルでその関数を呼び出す場合、関数宣言が必要です。この場合、関数が呼び出されるファイルの先頭で関数を宣言する必要があります。

関数の呼び出し

C++ 関数を作成するときは、関数の動作を定義し、その関数を呼び出して定義されたタスクを完了します。

プログラムが関数を呼び出すと、プログラムの制御は呼び出された関数に転送されます。呼び出された関数は定義されたタスクを実行し、関数の return ステートメントが実行されるか、関数の閉じ括弧に到達すると、プログラム制御をメイン プログラムに返します。

関数を呼び出すときに、必要なパラメータを渡し、関数が値を返す場合は、戻り値を保存できます。例:

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

max() 関数と main() 関数をまとめてソース コードをコンパイルします。最終的な実行可能ファイルが実行されると、次の結果が生成されます:

Max value is : 200

関数パラメータ

関数がパラメータを取る場合は、パラメータ値を受け入れる変数を宣言する必要があります。これらの変数は、関数の仮パラメータと呼ばれます。

仮パラメータは関数内の他のローカル変数と同様、関数に入るときに作成され、関数から出るときに破棄されます。

関数を呼び出すとき、関数にパラメータを渡すには 2 つの方法があります:

呼び出しの種類説明
値による呼び出し このメソッドは、パラメーターの実際の値を関数の仮パラメーターにコピーします。この場合、関数内の仮パラメータを変更しても実際のパラメータには影響しません。
ポインタ呼び出し このメソッドは、パラメータのアドレスを仮パラメータにコピーします。関数内では、このアドレスは呼び出しで使用される実際のパラメータにアクセスするために使用されます。これは、仮パラメータを変更すると実際のパラメータに影響を与えることを意味します。
Reference call このメソッドは、パラメータの参照を仮パラメータにコピーします。関数内では、この参照は呼び出しで使用される実際のパラメータにアクセスするために使用されます。これは、仮パラメータを変更すると実際のパラメータに影響を与えることを意味します。

デフォルトでは、C++ はパラメータを渡すために値による呼び出しを使用します。一般に、これは、関数内のコードが関数の呼び出しに使用されるパラメーターを変更できないことを意味します。前述の例では、max() 関数を呼び出すときに同じメソッドを使用します。

パラメータのデフォルト値

関数を定義するとき、パラメータリストに続く各パラメータのデフォルト値を指定できます。関数が呼び出されるときに、実際のパラメータの値が空白のままの場合、このデフォルト値が使用されます。

これは、関数定義で代入演算子を使用してパラメーターに値を割り当てることによって行われます。関数を呼び出すときに、引数の値が渡されない場合は、デフォルト値が使用されます。値が指定されている場合、デフォルト値は無視され、渡された値が使用されます。以下の例を参照してください:

#include <iostream>
using namespace std;
 
int sum(int a, int b=20)
{
  int result;

  result = a + b;
  
  return (result);
}

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int result;
 
   // 调用函数来添加值
   result = sum(a, b);
   cout << "Total value is :" << result << endl;

   // 再次调用函数
   result = sum(a);
   cout << "Total value is :" << result << endl;
 
   return 0;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます:

Total value is :300
Total value is :120