第1回、第2回と半端なところで終わってしまいました
(第1回、第2回のソースをあとでコンパイルしてみたところ
若干おかしいところ(打ち間違え)があったので修正)

今回の第3回目はデフォルト引数について説明します。

クラスの継承と多様性(ポリモーフィズム)までいかないと
C++(オブジェクト指向)の真価が見えないのですが・・・
そこまで書いてる余裕があるかは俺の都合と気力次第です
ちなみにポリモーフィズムで一旦C++言語講座は終了予定です。
というか、一度はじめてしまった以上、終わらせないと(俺の)気分が悪いので
書く暇を見つけ次第一気にやってしまおうと思います。
(一度書いてしまえば、みんな好きなときにみれるし、
何より俺がのんびりできるし・・・)

では、今回の講座に入りましょう。
デフォルト引数とは関数にデフォルトの引数の値を持たせることで
指定引数に変数を渡さなくても、デフォルトの引数の値が呼び出され、
関数のオーバーロードみたいなことができます。(正確には若干違いますが

ウダウダ説明するよりも例を見せてしまったほうが早い気がしますので
ひとつ例を挙げます。

void Test(int a,float b,float c = 6.0f);

関数のプロトタイプ宣言時(←ここ重要)にデフォルト引数を指定してやります。
ここでのデフォルト引数はc = 6.0f;という部分です。
これはc という変数の引数を渡さなければデフォルトで6.0fという値で
c の引数が渡されているよ〜って意味です

このTest関数の使い方は
2通りあります

Test(5,3.4f,5.6f);//←普通にa,b,cに引数を渡す
Test(5,3.4f);//←cはデフォルト引数を使う、すなわちcには6.0fが自動的に入る

では、実際コードを書いて試して見ましょう

//デフォルト引数
#include <iostream>
using namespace std;

//プロトタイプ宣言時にデフォルト引数(c = 6.0f)を書く
void Test(int a,float b,float c = 6.0f);

//関数の定義にはデフォルト引数の値を書かない
void Test(int a,float b,float c)
{
 cout << "a = " << a << endl;
 cout << "b = " << b << endl;
 cout << "c の引数がない場合は6.0fがc に自動的に入る c = " << c << endl;
}

int main()
{
  int a = 5;
  float b = 3.4f,c = 5.6f;
  Test(a,b,c);//←普通にa,b,cに引数を渡す
  Test(a,b);//←cはデフォルト引数を使う、すなわちcには6.0fが自動的に入る
 
  return 0;
}

デフォルト引数を使う上で1点注意があります。
それは、デフォルト引数は必ず、普通の引数を全部左側に書いたあとに
書かないといけません
つまり、

void Test(float c = 6.0f,int a,float b);

void Test(int a,float c = 6.0f,float b);

はコンパイルエラーになります。

ちなみに、デフォルト引数が2個以上の場合も右側に書けば大丈夫です

// 2個以上のデフォルト引数を持たせたい場合
void Test(int a,float b,float c = 6.0f,int d = 6);

デフォルト引数を使うことで
引数の初期設定をしておけて、呼び出しのときの引数を減らすことができるうえに、
使用時に必要な値を渡すこともできます。

選択肢 投票
(^ω^)わかったお 12  
普通 0  
。(`ω´#)。わかりにくぃぜぇえええええ 0  

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-30 (木) 18:13:09