2013年8月15日木曜日

C++関数のデフォルト引数とは

C++では、関数の引数にデフォルト引数を設定出来ます。^^
次の例を見てください。

デフォルト引数の設定と呼び出し
 プロトタイプ宣言で設定する場合(radius = 2, pi = 3.141592がデフォルト値です)

 double GetCircleArea(int radius = 2, double pi = 3.141592);


  なお、プロトタイプ宣言で設定しなかった場合は、関数定義でも設定できます。 
 関数定義で設定する場合(radius = 5, pi = 3,1415がデフォルト値です)

 double GetCircleArea(int radius, double pi);  //普通のプロトタイプ宣言
         :
 double GetCircleArea(int radius = 5, double pi = 3.1415)  //関数定義
 {
        return radius * radius * pi;
  }

 実際の呼び出し例
 デフォルト値が設定してあれば、引数を省略して呼び出すことができます。
  これは、プロトタイプ宣言で設定してある場合です。

 int main(void)
  {
      double area = 0;

      area = GetCircleArea();              //GetCircleArea(2, 3.141592); と同じです。
      cout << "area1 : " << area << endl;
      area = GetCircleArea(3);            //GetCircleArea(3, 3.141592); と同じです。
      cout << "area2 : " << area << endl;
      area = GetCircleArea(12, 3.14);  //GetCircleArea(12, 3.141592); と同じです。
      cout << "area3 : " << area << endl;
               :
  } 

 実行結果例
 # ./test
  area1 : 12.5664
  area2 : 28.2743
  area3 : 452.16
  :

デフォルト引数設定時の注意点
デフォルト値は、すべての引数に設定する必要はありません。

double GetCircleArea(int radius, double pi = 3.141592);  //pi にだけ設定

しかし、最初の引数だけにデフォルト値を設定することができません。(^_^;)
デフォルト値は最後の引数から順番に設定していく必要があります。

//最後の引数を飛ばして、radius にデフォルト値15を設定してみます。
double GetCircleArea(int radius = 15, double pi);

すると、コンパイルエラーになります。
error: default argument missing for parameter 2 of ‘double GetCircleArea(int, double)’


関数呼び出し時の注意点
デフォルト引数を持つ関数を呼び出すときは、ある引数を省略するとそれ以降の
引数は全て省略したとみなされます。
例えば、次のように最初の引数だけを省略することができません。

//最初の引数radiusの引数を省略して2番めの引数piだけを設定してみます。
double GetCircleArea(, 3.14);

すると、コンパイルエラーになります。
 error: default argument missing for parameter 2 of ‘double GetCircleArea(int, double)’
 In function ‘int main()’:
 error: expected primary-expression before ‘,’ token

 どういう時に使えるかというと、
  ほぼ毎回同じ値なんだけど、たまには変更したい という時です。(^^)

 こんな時にはデフォルト引数が便利ですね。


今日の名言
「もし太陽と月が己を疑えば、直ちに消え去るだろう」詩人である私は、このウィリアム・
ブレイクの詩が自分の作品であったら、とよく思ったものである。私は、計画に着手できない
生徒たちがいたら、よくこの詩をを引き合いに出して激励したものだ。自分自身を信ずることは
他のすべての信念の中心部分である。自信がなくなれば、人生は動きが取れなくなる。
もちろん、誰でも神経が高ぶる時がある。舞台に立ったり講演したりした経験のある者なら、
いよいよとなって「あがる」とはどんなものであるか、よく知っている。最上の俳優は幕が上がる
前に一番「あがる」と言われている。セリフを忘れるかもしれない、何かの手違いが起こるかも
しれない。-しかしいざ劇が始まると、スラスラと進行するのが常である。
これと同様に、ことを目前にして自信がなくなる事態は、ありとあらゆる人間活動に伴う。
作戦の実施、詩人の作詞、セールスマンの初仕事、花嫁の初料理など、皆そうである。
しかし、誰も彼もが失敗を恐れて行動を避けていたなら、何事も決して成し遂げられない。
自分自身の能力が信じられないのは、あらゆる人間活動には、必ず他人の賞賛や叱責が
大きく関係しているからだ。我々は理想的目標を立て、とても無理だと言って呻くのである。
しかし本来世の中が不完全なのに、完成ばかり目指すのは危険である。最上の方法は、
迷わずに目の前の仕事に着手することだ。戦闘の結果がどうなるか、ケーキの焼け具合が
どうなるかは、未来の手に任せれば良い。もし本当に最善を尽くしていれば、失敗を気に
かける暇などなくなる。
                                    ロバート・ヒリヤー