C++のデフォルト引数とは?基本の使い方をサンプルコードで解説
本記事では、C++における「デフォルト引数(デフォルト実引数)」の基本的な概念と使い方を、サンプルコードとともにわかりやすく解説します。
デフォルト引数とは
デフォルト引数とは、関数の宣言時にあらかじめ初期値を設定しておく引数のことです。関数を呼び出す際に、その引数に対応する値が渡されなかった場合、自動的に設定済みのデフォルト値が使用されます。
これにより、同じ関数を「引数の数が異なる複数のパターン」で柔軟に呼び出せるようになり、オーバーロードを定義する手間を省くことができます。
サンプルコード
以下は、デフォルト引数を持つ関数 sum() を定義した例です。引数 z と w にはデフォルト値として 0 が設定されています。
#include<iostream>
using namespace std;
// デフォルト引数を持つ関数の定義
int sum(int x, int y, int z=0, int w=0){
return (x + y + z + w);
}
int main(){
cout << sum(10, 15) << endl; // z, w はデフォルト値 0 を使用
cout << sum(10, 15, 25) << endl; // w のみデフォルト値 0 を使用
cout << sum(10, 15, 25, 30) << endl; // すべての引数に値を渡す
return 0;
}実行結果
25 50 80
解説
このプログラムでは、sum() 関数を3通りの方法で呼び出しています。
- sum(10, 15):引数が2つしか渡されていないため、
zとwにはデフォルト値の0が適用され、合計は 25 となります。 - sum(10, 15, 25):引数が3つ渡されているため、
wのみデフォルト値の0が適用され、合計は 50 となります。 - sum(10, 15, 25, 30):すべての引数に値が渡されているため、デフォルト値は使用されず、合計は 80 となります。
デフォルト引数を使用する際の注意点
デフォルト引数を定義する際には、いくつかのルールがあります。
- デフォルト値を設定できるのは、引数リストの右側から連続した引数のみです。例えば
int sum(int x=0, int y)のような定義はコンパイルエラーになります。 - 関数の宣言と定義を分ける場合、デフォルト値は宣言側に一度だけ記述します。両方に記述するとエラーとなります。
- デフォルト引数とオーバーロードを組み合わせると、呼び出しが曖昧になる場合があるため注意が必要です。
これらのルールを守ることで、デフォルト引数を活用した読みやすく保守性の高いコードを書くことができます。
-
C++の配列パズル:減算演算子を使わずに「自分以外の要素の合計」を求める方法
今回は、配列に関する興味深い問題を紹介します。n個の要素を持つ配列が与えられ、それをもとに同じくn個の要素を持つ別の配列を作成します。ただし、新しい配列のi番目には、元の配列のi番目の要素を除いたすべての要素の合計を格納します。さらに重要な制約として、減算演算子(-)を使用してはいけないという条件が課されています。 問題のポイント もし減算が使えるのであれば、話は簡単です。まず全要素の合計を求めておき、そこからi番目の要素を引いた値を新しい配列のi番目に格納すればよいだけです。しかし、この問題では減算が禁止されているため、別のアプローチが必要になります。 そこで、各位置i(0〜n-1)について
-
C++で可変数の引数(可変長引数)を扱う方法
プログラミングをしていると、引数の個数があらかじめ決まっていない関数、つまり呼び出しのたびに異なる数のパラメータを受け取れる関数が必要になる場面があります。C/C++ではこのような状況に対応する仕組みが用意されており、要件に応じて可変個の引数を受け取る関数を自由に定義できます。以下に、そのような関数の定義例を示します。 int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); } 注目すべきは、関数func()の最後の引数が省略記号(ピリオド3つの「...」)になってい