★デフォルト引数★


C++では、関数についても新しい機能が用意されています。

最初は「デフォルト引数」について説明します。

サンプルを書きましょう。

<sample program cpp008-01>

#include <iostream>

void ShowValue(const int value);

int main()
{
    ShowValue(25);

    return 0;
}

void ShowValue(const int value)
{
    std::cout << "value = " << value << std::endl;
}

<実行結果>

value = 25
続行するには何かキーを押してください・・・

まだ「デフォルト引数」は使っていません。

普通に「const int型」の引数を受け取る関数です。

この引数valueにデフォルトの値を設定することが出来るのです。

<sample program cpp008-02>

#include <iostream>

void ShowValue(const int value = 10);

int main()
{
    ShowValue(25);

    ShowValue();

    return 0;
}

void ShowValue(const int value)
{
    std::cout << "value = " << value << std::endl;
}

<実行結果>

value = 25
value = 10
続行するには何かキーを押してください・・・

プロトタイプ宣言のvalueの右側にデフォルトの値10を設定しました。

※本体には書きません。

1回目の呼び出しでは、引数に25が設定されているのでその数値が表示されています。

2回目の呼び出しには引数がありません。

引数が無い場合はデフォルトの値が使用されるのです。


大事なのは使い道ですが、良い例が無いので、言葉で書きます。

ある関数が10箇所から呼び出されるとします。

その関数の引数は9箇所は0で、残り1箇所は1です。

引数に1と書くのは10の内1回だけです。

この場合、デフォルトの値を0に設定しておくことで何度も同じ値を書かなくて済みます。

↓は適当なサンプルです。

<sample program cpp008-03>

#include <iostream>

void ShowValue(const int value = 0);

int main()
{
    ShowValue();
    ShowValue();
    ShowValue();
    ShowValue();
    ShowValue(1);

    return 0;
}

void ShowValue(const int value)
{
    std::cout << "value = " << value << std::endl;
}

<実行結果>

value = 0
value = 0
value = 0
value = 0
value = 1
続行するには何かキーを押してください・・・

もう1つ、複数の引数を持った関数へのデフォルトについて説明します。

<sample program cpp008-04>

#include <iostream>

int Multiply(const int lhs, const int rhs);

int main()
{
    std::cout << Multiply(3, 4) << std::endl;

    return 0;
}

int Multiply(const int lhs, const int rhs)
{
    return lhs * rhs;
}

<実行結果>

12
続行するには何かキーを押してください・・・

2つの値を渡して乗算した結果を返すMultiply関数です。

この関数の引数rhsにデフォルトの値を設定してみます。

<sample program cpp008-05>

#include <iostream>

int Multiply(const int lhs, const int rhs = 1);

int main()
{
    std::cout << Multiply(3, 4) << std::endl;

    std::cout << Multiply(5) << std::endl;

    return 0;
}

int Multiply(const int lhs, const int rhs)
{
    return lhs * rhs;
}

<実行結果>

12
5
続行するには何かキーを押してください・・・

rhsにはデフォルトの値が設定してありますから、

Multiply(5)

と書いた場合、rhsにはデフォルトの値1が適用されます。


では、rhsではなくlhsの方にデフォルトの値を設定してみましょう。

<sample program cpp008-06>

#include <iostream>

int Multiply(const int lhs = 1, const int rhs);

int main()
{
    std::cout << Multiply(3, 4) << std::endl;

    std::cout << Multiply(5) << std::endl;

    return 0;
}

int Multiply(const int lhs, const int rhs)
{
    return lhs * rhs;
}

<コンパイル結果>

error C2548: 'Multiply': 2 番目の引数に対して既定の引数がありません。
error C2660: 'Multiply': 関数に 1 個の引数を指定できません。

コンパイル時にエラーになりました。

  2 番目の引数に対して既定の引数がありません。

と書いてあります。

2番目の引数とはrhsの事です。

言葉は伝わり難いかも知れませんが、デフォルト引数は「右詰め」で設定しなければなりません。

int Multiply(const int lhs, const int rhs);

このように複数の引数があった場合、rhsからデフォルトの値を設定する必要があります。

rhsにデフォルトの値が設定されている場合、lhsにもデフォルトの値が設定出来ます。

最後のサンプルを見てみましょう。

<sample program cpp008-07>

#include <iostream>

int Multiply(const int lhs = 2, const int rhs = 8);

int main()
{
    std::cout << Multiply(3, 4) << std::endl;

    std::cout << Multiply(5) << std::endl;

    std::cout << Multiply() << std::endl;

    return 0;
}

int Multiply(const int lhs, const int rhs)
{
    return lhs * rhs;
}

<実行結果>

12
40
16
続行するには何かキーを押してください・・・

rhsとlhsにデフォルトの値を設定しました。

Multiply(3, 4)

この場合、デフォルトの値は使われませんので、

  3 × 4 = 12

となります。

Multiply(5)

この場合、デフォルトの値はrhsのみ使われますので、

  5 ×  = 40

となります。

Multiply()

この場合、デフォルトの値はlhsとrhsの両方が使われますので、

   ×  = 16

となります。


そこまで頻繁に使うものではありませんが、覚えておくと便利です。


次へ

戻る

目次へ