デフォルト引数


引数のデフォルト値

関数に渡す引数で、C++ではデフォルトの値を持たせることができます
すなわち指定されなかったときに使う値を持たせるということです
これは、オーバーロードと関連した機能の一つです

これを利用することで、引数が省略可能な関数を作成できます
引数のデフォルト値を与えるには、関数のプロトタイプ、または定義のいずれかで
次のように、仮引数に目的とするデフォルト値を与えます

function(type arg = value);

関数 function の type 型の仮引数 arg の初期値が value に指定されます
この関数を引数無しで呼び出した場合は、第一引数に value が渡されたものとします
#include<iostream>
using namespace std;

void Kitty(char *str = "Kitty on your lap\n") {
	cout << str;
}

int main() {
	Kitty();
	Kitty("Di Gi Gharat\n");
	return 0;
}
Kitty() 関数の引数にはデフォルトの値が割り当てられています
そのため、何も指定しなかった場合はデフォルトの値が引数に使用されます

デフォルトの値を指定するのは関数のプロトタイプ、または定義のいずれかなので
その両方で指定することはできないので気をつけてください(たとえ値が同じでもできません)

また、デフォルトの値を持つ引数は引数内に複数指定することができます
#include<iostream>
using namespace std;

void Kitty(char *name = "Rena" , int age = 15) {
	cout << "名前 : " << name << "\t年齢 : " << age << '\n';
}

int main() {
	Kitty();
	Kitty("Yuki");
	Kitty("Sakura" , 11);
	return 0;
}
このプログラムの Kitty() 関数は引数を二つ受け取ります
その両方がデフォルトの値を持っています

呼び出しの時に第一引数にデフォルト値を用い第二引数を指定することはできません
必ず指定する時は、第一引数からの指定になります
Kitty( , 15) というようなものは無効であり、このような指定はできません

デフォルトの値を持たない引数と、デフォルトの値を持つ引数を混同させることもできます
ただしこの場合デフォルト引数はもっとも右側に定義する必要があります
デフォルトの値を持たない引数は、デフォルト引数の全てより必ず左側に配置します
また、デフォルト引数を指定するとその後、デフォルトの値を持たない引数を配置することはできません
#include<iostream>
using namespace std;

void Kitty(char *name , int age = 15) {
	cout << "名前 : " << name << "\t年齢 : " << age << '\n';
}

int main() {
	Kitty("Rena");
	Kitty("Sakura" , 11);
	return 0;
}
char *name を int age = 15 より右側に配置することはできません

デフォルト引数をコンストラクタに使うことも可能です
コンストラクタの引数にデフォルト引数を使うことも、非常に一般的です

デフォルト引数は、関数のオーバーロードにおいて
曖昧な状態になることがあるので注意してください
#include<iostream>
using namespace std;

void Kitty(char *str) {
	cout << "名前 : " << str << '\n';
}

void Kitty(char *str , int age = 15) {
	cout << "名前 : " << str << "\t年齢 : " << age << '\n';
}

int main() {
	Kitty("Rena");
	return 0;
}
main() 関数の Kitty("Rena") は、オーバーロードされている Kitty() 関数のうち
どちらにも対応してしまうため、表現が曖昧になっています



前のページへ戻る次のページへ