C++では、引数の数や、引数型の違いによって、同じ関数名を持つ動作の違う別の関数を定義できる・・・。
これを、関数のオーバーロードという・・・。
前回のclass_string_bufferでcreateという文字列バッファ生成関数があったが、生成だけじゃなく特定の文字列にセット(つまり初期化)する処理も加えて行う関数を追加してみよう・・・。
これまでは文字列バッファのサイズであるsizeだけを指定していたが、新しい関数では初期文字列src_strも指定する・・・。
sizeの後ろにsrc_strをつけてもよさそうだが、sizeはデフォルト引数の制約(デフォルト引数のある引数は、ない引数より右に書かないといけない)もあり、先にsrc_str、そのあとsizeとしている・・・。
で中身は、create(int size)が、
なのに対し、create(const char *src_str, int size)は、
と中でcreate(int size)とsetを呼び出しているだけだったりする・・・。
もちろん、独自の処理を書くこともできるが、オーバーロード元のメンバ関数や他のメンバ関数を利用することが多い・・・。
main関数で、
とoverloadを宣言したら、
こんな感じで生成と初期化を同時にする・・・。
実行してみると、
$ ./function_overload buffer.get_size() = 32 half.get_size() = 16 overload.get_size() = 24 buf = ABCDEFGHIJKLMNOPQRSTUVWXYZ12345 half_buf = ABCDE overload_buf = ABCDEFGHIJKLMNOPQRSTUVW $
サイズも指定した文字列もセットされてる・・・。(といっても、overloadにセットしたときに"XYZ"が切られてしまっているけども・・・。)
Sample/function_overload.cpp at master · bg1bgst333/Sample · GitHub