デフォルト引数

C++では、引数にデフォルトの値を設定できる・・・。
デフォルト引数が設定された関数は、引数を渡さずに呼ぶことができ、その時は内部がデフォルト値で処理される・・・。

void func(int i);
void func2(int j = 20);

void func(int i = 10){
  printf("i = %d\n", i);
}
void func2(int j){
  printf("j = %d\n", j);
}

宣言、または定義のどちらかにデフォルトの値を設定するだけである・・・。(両方はダメ・・・。)

文字列バッファクラスの生成時にデフォルト引数を使ってみた・・・。

このような文字列バッファクラスを作成し、

createメンバ関数の定義でデフォルト引数を32とした・・・。
ちなみに、この文字列バッファクラスclass_string_bufferにおけるサイズの定義は、「格納できるNULL文字を含まない文字バイト数」なので、デフォルトが32ということは、ASCIIで32文字格納できるということ・・・。
実際のメモリサイズは32 + 1(NULL文字) = 33バイトである・・・。

main関数でcreateを呼ぶ時、引数を与えた時と与えない時の違いは、

引数を与えない時はデフォルトの32、与えた時は16で内部が処理される・・・。

文字列バッファサイズを出力してみると、

buffer.get_size() = 32
half.get_size() = 16

確かに違う・・・。

まあ、この後はあまり関係ないけど、このプログラムでは、これらの文字列バッファにsetしてから、再びgetして、出力している・・・。

実行すると、

$ ./default_argument
buffer.get_size() = 32
half.get_size() = 16
buf = ABCDEFGHIJKLMNOPQRSTUVWXYZ12345
half_buf = ABCDE
$

となる・・・。